Android - 从另一个 Activity 将对象添加到 ListView

标签 android listview parcelable

我有一个带有我自己的适配器的自定义 ListView 。我可以在同一 Activity 中将对象添加到此列表,但我想做的是从另一个 Activity 中添加对象。在此其他 Activity 中,有两个编辑文本框。一个负责正文,第二个负责描述,两个单选按钮决定图像。底部是添加按钮,应该将输入的数据添加到 ListView 。

我试着用 Parcelable 来做这个,但我不知 Prop 体如何实现它。下面是我的 ListView 类:

public class Activity_4 extends AppCompatActivity {

private ListView listView;
private myAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_4);

    listView = (ListView)findViewById(R.id.listView4);
    ArrayList<Object> objectList = new ArrayList<>();

    objectList.add(new Object(R.drawable.row_img, "After Earth" , "2013"));
    objectList.add(new Object(R.drawable.row_img, "After Earth" , "2013"));
    objectList.add(new Object(R.drawable.row_img, "After Earth" , "2013"));
    objectList.add(new Object(R.drawable.row_img, "After Earth" , "2013"));
    objectList.add(new Object(R.drawable.row_img, "After Earth" , "2013"));
    objectList.add(new Object(R.drawable.row_img, "After Earth" , "2013"));

    mAdapter = new myAdapter(this,objectList);
    listView.setAdapter(mAdapter);

}

public class Object implements Parcelable {
    int imageID;
    String mainText;
    String description;

    public Object (int imageID, String mainText, String description) {
        this.imageID = imageID;
        this.mainText = mainText;
        this.description = description;
    }

    public Object() {

    }

    public int getImageID() {
        return imageID;
    }
    public void setImageID(int imageID) {
        this.imageID = imageID;
    }
    public String getMainText () {
        return  mainText;
    }
    public void setMainText() {
        this.mainText = mainText;
    }
    public  String getDescription() {
        return  description;
    }
    public void setDescription() {
        this.description = description;
    }

    public Object(Parcel in) {
        this.imageID = in.readInt();
        this.mainText = in.readString();
        this.description = in.readString();

    }


    public final Parcelable.Creator<Object> CREATOR = new Parcelable.Creator<Object>() {
        @Override
        public Object createFromParcel(Parcel in) {
            return new Object(in);
        }

        @Override
        public Object[] newArray(int size) {
            return new Object[size];
        }
    };
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(imageID);
        dest.writeString(mainText);
        dest.writeString(description);
    }

}

public class myAdapter extends ArrayAdapter<Object> {

    private Context mContext;
    private List<Object> objectList = new ArrayList<>();

    public myAdapter(@NonNull Context context, ArrayList<Object> list) {
        super(context,0,list);
        mContext = context;
        objectList = list;
    }

    @NonNull
    @Override
    public View getView (int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View listItem = convertView;
        if (listItem == null)
            listItem = LayoutInflater.from(mContext).inflate(R.layout.list_row, parent, false);

        Object currentObject = objectList.get(position);

        ImageView image = (ImageView) listItem.findViewById(R.id.row_image);
        image.setImageResource(currentObject.getImageID());

        TextView mainTxt = (TextView) listItem.findViewById(R.id.row_tv1);
        mainTxt.setText(currentObject.getMainText());

        TextView description = (TextView) listItem.findViewById(R.id.row_tv2);
        description.setText(currentObject.getDescription());
        
        return listItem;
    }

}

谁能帮忙解决这个问题?

谢谢

最佳答案

您可以使用 startActivityForResult() 其他 Activity 并在 bundle 中传递 data 作为点击添加的结果来自其他 Activity 的按钮,因此当前 Activity 会将数据添加到它的列表中。

调用其他Activity添加

startActivityForResult(intent,reqCode);

关于结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data != null && requestCode == reqCode) {
           Object object = new Object();
           object.setImageID(data.getIntExtra("image_id"));
           object.setMainText(data.getStringExtra("main_text");
           object.setDescription(data.getStringExtra("desc");
           objectlist.add(object);
           mAdapter.notifyDataSetChanged();
       }
}

其他 Activity

public void onAddClick(){
  Intent intent = new Intent();
  intent.putIntExtra("image_id",*<value>*);
  intent.putStringExtra("main_text",*<value>*);
  intent.putStringExtra("desc",*<value>*);
  setResult(intent);
  finish();
}

关于Android - 从另一个 Activity 将对象添加到 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49689158/

相关文章:

android - 在位图上绘制膨胀布局 xml

java - 如何正常或使用 EventBus 将数据从 Activity 传递到 Service?

c# - 如何在 xamarin ios 中创建 ListView

android - 在RecyclerView中获取后从 fragment 传输数据时如何更改 fragment 的内容?

java - 检测到 NFC 标签后启动我的应用程序,然后显示结果

java - 使用 JSON 从 API 获取数据并将两个对象存储在数组适配器的单行中

Android ListView 中的 EditText

Android:如何创建一个实现 Parcelable 的类,其中包含一个非静态自定义类的 ArrayList

android - 将复杂对象列表从 Activity 传递到 fragment

java - MongoClient 是抽象的,无法实例化