

Androidについて質問があります。

1画面にGridViewとListViewを 1対1の比で上下に配置するレイアウトを持つアプリを考えています。

上のGridViewでタップしたら, そのイベントでListViewを更新というように連携させたいのですが,
activityファイルが肥大化していくのが少し気になっています。

これらのViewの管理はそれぞれ別activityに落とし込みたいのですが, それは可能なんでしょうか?

またそうした場合, タップイベントの取得がどういう流れになるのかも知りたいです。  
よろしくお願いいたします。


CC BY-SA 3.0
2016-11-12T07:53:41.513
30342
2016-11-20T09:51:14.910
19535
question
android
1画面の機能を別ファイルにしたい


Fragmentを使えばよいと思います。  
最善のやり方かは分かりませんが少しコードも書いておきます。

MainActivity.java

[code]

    //importは省略します。
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private EditText etext;
    
        @Override
        protected void onCreate(Bundle state) {
            super.onCreate(state);
            setContentView(R.layout.main);
            //レイアウトにFrameLayoutなどを追加してListViewを追加したFragmentにreplaceしてください。
            //ここではButtonとEditTextで表現します。GridViewに置き換えて考えてください。
            etext = (EditText) findViewById(R.id.etext);
            Button btn = (Button) findViewById(R.id.button);
            btn.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v){
            //Fragmentに実装されているonItemAddメソッドを呼び出します。
            if (listener != null) {
                listener.onItemAdd(etext.getText().toString);
            }
        }
    
        private onItemAddListener listener;
    
        public void setOnItemAddListener(OnItemAddListener listener) {
            this.listener = listener;
        }
    
        public interface onItemAddListener {
            //Fragmentに渡したい値の型を指定します。
            void onAddItemAdd(String label);
        }
    }
    
[/code]

ListViewが追加されているFragmemt  
ListFragment.java

[code]

    //importは省略します。
    public class ListFragment extends Fragment implements MainActivity.OnItemAddListener {
        public ListFragment() {/*empty*/}
    
        private TextView textView;
    
        @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle state) {
            View v = inflater.inflate(R.layout.list, container, false);
    
            textView = (TextView) v.findViewById(R.id.textView);
            MainActivity activity = (MainActivity) getActivity();
            activity.setOnItemAddListener(this);
    
            return v;
        }
    
        @Override
        public void onItemAdd(String label) {
            textView.setText(textView.getText().toString() + label);
        }
    
[/code]

Fragmentでの処理はTextViewで表現しましたが、ListFragmentのonItemAddメソッドでの処理内容を変えればListViewへの更新も対応できます。


CC BY-SA 3.0
2016-11-20T09:51:14.910
30553
2016-11-20T09:51:14.910
30342
answer