Java 如何在android recyclerview适配器中获取所有更改的项目

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

我在RecyclerView中使用名称和描述

但是名称和描述有edittext,用户可以在其中更改名称、描述并提交整个字段

现在的问题是如何获取recyclerview android中所有项目的整个字段

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());
    }