Java 如何在android recyclerview适配器中获取所有更改的项目
我在RecyclerView中使用名称和描述 但是名称和描述有edittext,用户可以在其中更改名称、描述并提交整个字段 现在的问题是如何获取recyclerview android中所有项目的整个字段Java 如何在android recyclerview适配器中获取所有更改的项目,java,android,arrays,android-recyclerview,android-json,Java,Android,Arrays,Android Recyclerview,Android Json,我在RecyclerView中使用名称和描述 但是名称和描述有edittext,用户可以在其中更改名称、描述并提交整个字段 现在的问题是如何获取recyclerview android中所有项目的整个字段 public static List<CityEvent> getData() { List<CityEvent> list = new ArrayList<>(); list.add(new CityEvent("Some
public static List<CityEvent> getData() {
List<CityEvent> list = new ArrayList<>();
list.add(new CityEvent("Some event", "Some event in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Some event", "Some event in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Some event", "Some event in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Some event", "Some event in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Some event", "Some event in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Some event", "Some event in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Droidcon", "Droidcon in Berlin", CityEvent.EVENT_TYPE));
return list;
}
public class CityEvent {
public static final int EVENT_TYPE = 1;
private String mName;
private String mDescription;
private int mType;
public CityEvent(String name, String description, int type) {
this.mName = name;
this.mDescription = description;
this.mType = type;
}
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
public String getDescription() {
return mDescription;
}
public void setDescription(String description) {
this.mDescription = description;
}
public int getType() {
return mType;
}
public void setType(int type) {
this.mType = type;
}
}
主要活动:
//just pasting the main logic
DifferentRowAdapter adapter = new DifferentRowAdapter(getData());
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, OrientationHelper.VERTICAL, false);
final RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(linearLayoutManager);
//this is imp
mRecyclerView.setNestedScrollingEnabled(false);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(adapter);
我认为您需要做的是在所有
ViewHolder
对象的EditText
字段中侦听文本更改。您可以在onBindViewHolder()
或ViewHolder
类的构造函数中设置侦听器,在您的示例中是EventViewHolder
。然后您需要ArrayList
,一个用于title
,另一个用于description
,并使用输入这些字段的初始值设置它们。在任何文本更改中,可以使用TextWatcher
的onTextChanged()
更新ArrayList
中的值。当需要传递所有值时,只需传递我上面提到的两个ArrayList
对象
这是您在字段中使用了setText()
的那一行之后的onBindViewHolder()
的外观titleData
和descriptionData
是两个ArrayList
对象,假定已初始化
titleData.add(object.getName());
descriptionData.add(object.getDescription());
((EventViewHolder)holder).mTitle.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
titleData.remove(position);
titleData.add(position, s.toString());
}
((EventViewHolder)holder).mDescription.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
descriptionData.remove(position);
descriptionData.add(position, s.toString());
}
没有您想要的功能。要解决此任务,您必须将OnFocusChangeListener设置为编辑文本,并在edittext失去焦点后为对象设置新值。您可以在onBindViewHolder中发布大致内容吗?如何从每一行获取这些项目?
//just pasting the main logic
DifferentRowAdapter adapter = new DifferentRowAdapter(getData());
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, OrientationHelper.VERTICAL, false);
final RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(linearLayoutManager);
//this is imp
mRecyclerView.setNestedScrollingEnabled(false);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(adapter);
titleData.add(object.getName());
descriptionData.add(object.getDescription());
((EventViewHolder)holder).mTitle.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
titleData.remove(position);
titleData.add(position, s.toString());
}
((EventViewHolder)holder).mDescription.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
descriptionData.remove(position);
descriptionData.add(position, s.toString());
}