猿问

如何将数据从一个活动传递到另一个活动

我正在创建一个事件应用程序,其中包含recyclerview.

事件recyclerview包括事件名称、图像、日期和时间、心形图像(例如:Instagram 上的心形按钮),当用户单击“感兴趣”按钮时,它会改变颜色。

单击任何事件后,会出现其描述,并且有两个按钮:“感兴趣”和“参加”。如果用户单击“感兴趣”,则心形颜色recyclerview将变为黄色。该事件还将保存在另一个列表中,直到该事件从保存的列表中删除。

到目前为止,我已经通过单击“感兴趣”按钮将该事件保存在已保存列表中。但我不知道如何同时更改心形颜色以及如何让它保持不变,直到事件从保存的列表中删除。

我的 recyclerview 中有心脏图像。当我在描述活动中单击兴趣按钮时,recyclerview 中的心脏图像会发生变化。



陪伴而非守候
浏览 141回答 4
4回答

守着星空守着你

假设您将事件保存在某个模型类中,您可以做的是在调用onBindViewHolder适配器的方法时检查事件是否标记为保存。如果是,那么您需要将心脏图像更改为另一个黄色的心脏图像,或者您可以在心脏图像上应用色调使其变成黄色。您可以使用此代码更改可绘制对象heartImageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.yellow_heart));您可以使用此代码应用色调heartImageView.setColorFilter(Color.argb(255, 255, 255, 0))编辑(基于评论)如果心脏在第一个活动中,而感兴趣的按钮在第二个活动中,您需要做的是在单击感兴趣的按钮时保存事件的状态。返回到第一个活动后,您可以检查事件的状态,然后使用上述两种方法中的任何一种来更新图像。编辑 2(基于共享的新代码)收到 Volley 调用的响应后,您应该将事件 ID 保存在某处以跟踪您感兴趣的事件(这可以在模型类或某个全局列表中)。当您返回到您的第一个活动(其中包含 recyclerview)时,您需要使用您拥有的已存储事件 ID 列表检查每个事件 ID,并为每个匹配的事件更改心脏。

富国沪深

您可以在以下帮助下执行此操作startActivityforresult在 Activity1 中,启动 Activity2 为:Intent i = new Intent(this, Activity2.class);startActivityForResult(i, 1);在 Activity2 中,使用 setResult 发送回数据:Intent intent = new Intent();intent.putExtra("updatedArraylist", "arraylist")setResult(RESULT_OK, intent);&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;finish();在 Activity1 中,使用 onActivityResult 接收数据:public void onActivityResult(int requestCode, int resultCode,&nbsp;Intent data) {&nbsp; &nbsp; super.onActivityResult(requestCode, resultCode, data);&nbsp; &nbsp; if (requestCode == 1) {&nbsp; &nbsp; &nbsp; &nbsp; if(resultCode == RESULT_OK) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String strArrayList =&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data.getStringExtra("updatedArraylist");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Gson gson = new Gson();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Type youListType = new TypeToken<List<Model>>() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }.getType();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<Model> yourTypeList = gson.fromJson(strArrayList,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yourListType);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ArrayList finalArraylist = new ArrayList<>(yourTypeList);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yourArraylist.addAll(finalArraylist);&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; youtAdapter.notifyDataSetChanged();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; }}&nbsp;

MMTTMM

在第一个活动中Intent intent = new Intent(getApplicationContext(), SecondActivity.class);startActivityForResult(intent, 100);从第二个活动开始,您必须在活动被 finish() 或后退键销毁之前执行以下代码(为此,您可以覆盖第二个活动的 onBackPressed 并删除超类调用并调用以下方法)。private void exitWithResult(){&nbsp; &nbsp; Intent returnIntent = new Intent();&nbsp; &nbsp; returnIntent.putExtra("result", "Id of selected item");&nbsp; &nbsp; setResult(Activity.RESULT_OK, returnIntent);&nbsp; &nbsp; finish();}同样在第一个活动中,您必须在 onActivityResult 方法中处理结果。@Override&nbsp; &nbsp; protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {&nbsp; &nbsp; &nbsp; &nbsp; if (requestCode == 100) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(resultCode == Activity.RESULT_OK){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String result=data.getStringExtra("result");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.e("DATA", "" + result);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (resultCode == Activity.RESULT_CANCELED) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Write your code if there's no result&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.e("DATA", "No result");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }更新您可以使用接口作为从适配器到活动的回调。startActivityForResult 可以在接口的回调方法中调用。您必须通过适配器构造函数将回调接口与数据集一起传递给适配器。在适配器中声明此接口public interface AdapterCallback{&nbsp; &nbsp; &nbsp; &nbsp; void onAdapterSelected(int pos);&nbsp; &nbsp; }在第一个活动中实现这样的接口。MyAdapter.AdapterCallback callback = new MyAdapter.AdapterCallback() {&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onAdapterSelected(int pos) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Intent intent = new Intent(getApplicationContext(),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecondActivity.class);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startActivityForResult(intent, 100);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; };然后像这样设置适配器。RecyclerView rv = findViewById(R.id.rv_list);rv.setHasFixedSize(true);rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));MyAdapter adapter = new MyAdapter(callback);&nbsp; &nbsp;//This is the only changerv.setAdapter(adapter);下面适配器的变化。(你应该像你已经做的那样传递列表数据和回调)&nbsp; &nbsp; private AdapterCallback callback;&nbsp; &nbsp; &nbsp; &nbsp; public MyAdapter(AdapterCallback callback) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.callback = callback;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; viewHolder.mBtn.setOnClickListener(new View.OnClickListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onClick(View v) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callback.onAdapterSelected(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;});&nbsp; &nbsp; }接口也来自内部适配器。正如我一开始提到的那样,我不会在这里重复

倚天杖

您可以将coloronclick 事件应用于心脏按钮,如以下代码:your_image_id.setBackgroundColor(getResources().getColor(R.color.yellow));
随时随地看视频慕课网APP

相关分类

Java
我要回答