4 回答
TA贡献1799条经验 获得超8个赞
假设您将事件保存在某个模型类中,您可以做的是在调用onBindViewHolder
适配器的方法时检查事件是否标记为保存。如果是,那么您需要将心脏图像更改为另一个黄色的心脏图像,或者您可以在心脏图像上应用色调使其变成黄色。
您可以使用此代码更改可绘制对象
heartImageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.yellow_heart));
您可以使用此代码应用色调
heartImageView.setColorFilter(Color.argb(255, 255, 255, 0))
编辑(基于评论)
如果心脏在第一个活动中,而感兴趣的按钮在第二个活动中,您需要做的是在单击感兴趣的按钮时保存事件的状态。返回到第一个活动后,您可以检查事件的状态,然后使用上述两种方法中的任何一种来更新图像。
编辑 2(基于共享的新代码)
收到 Volley 调用的响应后,您应该将事件 ID 保存在某处以跟踪您感兴趣的事件(这可以在模型类或某个全局列表中)。当您返回到您的第一个活动(其中包含 recyclerview)时,您需要使用您拥有的已存储事件 ID 列表检查每个事件 ID,并为每个匹配的事件更改心脏。
TA贡献1790条经验 获得超9个赞
您可以在以下帮助下执行此操作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);
finish();
在 Activity1 中,使用 onActivityResult 接收数据:
public void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String strArrayList =
data.getStringExtra("updatedArraylist");
Gson gson = new Gson();
Type youListType = new TypeToken<List<Model>>() {
}.getType();
List<Model> yourTypeList = gson.fromJson(strArrayList,
yourListType);
ArrayList finalArraylist = new ArrayList<>(yourTypeList);
yourArraylist.addAll(finalArraylist);
youtAdapter.notifyDataSetChanged();
}
}
}
TA贡献1869条经验 获得超4个赞
在第一个活动中
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
startActivityForResult(intent, 100);
从第二个活动开始,您必须在活动被 finish() 或后退键销毁之前执行以下代码(为此,您可以覆盖第二个活动的 onBackPressed 并删除超类调用并调用以下方法)。
private void exitWithResult(){
Intent returnIntent = new Intent();
returnIntent.putExtra("result", "Id of selected item");
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
同样在第一个活动中,您必须在 onActivityResult 方法中处理结果。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == 100) {
if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
Log.e("DATA", "" + result);
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
Log.e("DATA", "No result");
}
}
}
更新
您可以使用接口作为从适配器到活动的回调。startActivityForResult 可以在接口的回调方法中调用。您必须通过适配器构造函数将回调接口与数据集一起传递给适配器。
在适配器中声明此接口
public interface AdapterCallback{
void onAdapterSelected(int pos);
}
在第一个活动中实现这样的接口。
MyAdapter.AdapterCallback callback = new MyAdapter.AdapterCallback() {
@Override
public void onAdapterSelected(int pos) {
Intent intent = new Intent(getApplicationContext(),
SecondActivity.class);
startActivityForResult(intent, 100);
}
};
然后像这样设置适配器。
RecyclerView rv = findViewById(R.id.rv_list);
rv.setHasFixedSize(true);
rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
MyAdapter adapter = new MyAdapter(callback); //This is the only change
rv.setAdapter(adapter);
下面适配器的变化。(你应该像你已经做的那样传递列表数据和回调)
private AdapterCallback callback;
public MyAdapter(AdapterCallback callback) {
this.callback = callback;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
viewHolder.mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback.onAdapterSelected(i);
}
});
}
接口也来自内部适配器。正如我一开始提到的那样,我不会在这里重复
TA贡献1828条经验 获得超3个赞
您可以将color
onclick 事件应用于心脏按钮,如以下代码:
your_image_id.setBackgroundColor(getResources().getColor(R.color.yellow));
添加回答
举报