久しぶりに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