我有一个Android ListView,每行包含1个textview和2个edittexts:
<TextView
android:id="@+id/topic_id"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight"1"
/>
<EditText
android:id="@+id/topic_name"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="2"
android:textStyle="bold"
android:textSize="15sp"
/>
<EditText
android:id="@+id/topic_description"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="4"
android:textSize="15sp"
/>
用户可以在editTexts中编写所有内容。 我的问题是如何获取此文本?
我的意思是我希望有一个方法在listView中获取行的位置,并返回此行的editTexts内的文本。
此数据在适配器中不存在,因为用户而不是适配器,在editText中写入数据。
如果有人可以提供帮助我会很感激。谢谢!
答案 0 :(得分:0)
您可以为适配器和Activity / Fragment之间的通信创建一个接口。
public interface OnEditingEndListener {
void onDone(String editText);
}
该活动实现onDone方法,该方法在EditText收到“on done edit”通知时触发。 可以使用
触发此事件mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mListener.onDone(mEditText.getText().toString());
return true;
}
return false;
}
});
其中
mListener
是您在适配器构造函数中传递的OnEditingEndListener属性:
public MyAdapter(OnEditingEndListener listener) {
mListener = listener;
}
当事件发生时,监听器将响应:
@Override
void onDone(String editText) {
//do something with the text insert by the user
}