久しぶりにAndroidアプリをつくっています
Pythonでががーって作ることが多いこの頃ですが久しぶりにUIがあるものが作りたくなりました
ListViewの中にEditViewを入れ、ボタン遷移等でListViewの中にあるEditViewの中身が欲しいとなったときに取り出せず悩みました
色々調査したらできたので解決方法のメモしておきます
簡単に説明するとEditViewにて値を入れ終わったときに呼ばれる関数にListViewの更新をかけるようすると入ります
MainActivity.javaでもいけると思いますが、ListViewの処理はListViewでしてほしいためAdapter内に記述しました
プログラム(重要じゃない箇所は端折ります)
public class MyAdapter extends BaseAdapter { Context context; LayoutInflater layoutInflater = null; ArrayList<MyItem> nounList; public MyAdapter(Context context) { this.context = context; this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void setNounList(ArrayList<MyItem> nounList) { this.nounList = nounList; } @Override public int getCount() { return nounList.size(); } @Override public Object getItem(int position) { return nounList.get(position); } @Override public long getItemId(int position) { return nounList.get(position).getId(); } @Override public View getView(final int position, View convertView, ViewGroup parent) { convertView = layoutInflater.inflate(R.layout.mylistitem,parent,false); //ココ重要 ((EditText)convertView.findViewById(R.id.noun_text)).addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } //EditTexitが編集し終わったときに呼ばれる関数 @Override public void afterTextChanged(Editable s) { //editのなかにこれいれないと更新されない nounList.get(position).setNoun(String.valueOf(s)); } }); return convertView; } }
これでListView内にあるEditViewが更新されるようになりました
参考文献
- teratail, http://teratail.com/questions/12759
コメント