4 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
假設(shè)您將事件保存在某個(gè)模型類中,您可以做的是在調(diào)用onBindViewHolder
適配器的方法時(shí)檢查事件是否標(biāo)記為保存。如果是,那么您需要將心臟圖像更改為另一個(gè)黃色的心臟圖像,或者您可以在心臟圖像上應(yīng)用色調(diào)使其變成黃色。
您可以使用此代碼更改可繪制對(duì)象
heartImageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.yellow_heart));
您可以使用此代碼應(yīng)用色調(diào)
heartImageView.setColorFilter(Color.argb(255, 255, 255, 0))
編輯(基于評(píng)論)
如果心臟在第一個(gè)活動(dòng)中,而感興趣的按鈕在第二個(gè)活動(dòng)中,您需要做的是在單擊感興趣的按鈕時(shí)保存事件的狀態(tài)。返回到第一個(gè)活動(dòng)后,您可以檢查事件的狀態(tài),然后使用上述兩種方法中的任何一種來(lái)更新圖像。
編輯 2(基于共享的新代碼)
收到 Volley 調(diào)用的響應(yīng)后,您應(yīng)該將事件 ID 保存在某處以跟蹤您感興趣的事件(這可以在模型類或某個(gè)全局列表中)。當(dāng)您返回到您的第一個(gè)活動(dòng)(其中包含 recyclerview)時(shí),您需要使用您擁有的已存儲(chǔ)事件 ID 列表檢查每個(gè)事件 ID,并為每個(gè)匹配的事件更改心臟。

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
您可以在以下幫助下執(zhí)行此操作startActivityforresult
在 Activity1 中,啟動(dòng) Activity2 為:
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
在 Activity2 中,使用 setResult 發(fā)送回?cái)?shù)據(jù):
Intent intent = new Intent();
intent.putExtra("updatedArraylist", "arraylist")
setResult(RESULT_OK, intent);
finish();
在 Activity1 中,使用 onActivityResult 接收數(shù)據(jù):
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貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
在第一個(gè)活動(dòng)中
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
startActivityForResult(intent, 100);
從第二個(gè)活動(dòng)開(kāi)始,您必須在活動(dòng)被 finish() 或后退鍵銷毀之前執(zhí)行以下代碼(為此,您可以覆蓋第二個(gè)活動(dòng)的 onBackPressed 并刪除超類調(diào)用并調(diào)用以下方法)。
private void exitWithResult(){
Intent returnIntent = new Intent();
returnIntent.putExtra("result", "Id of selected item");
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
同樣在第一個(gè)活動(dòng)中,您必須在 onActivityResult 方法中處理結(jié)果。
@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");
}
}
}
更新
您可以使用接口作為從適配器到活動(dòng)的回調(diào)。startActivityForResult 可以在接口的回調(diào)方法中調(diào)用。您必須通過(guò)適配器構(gòu)造函數(shù)將回調(diào)接口與數(shù)據(jù)集一起傳遞給適配器。
在適配器中聲明此接口
public interface AdapterCallback{
void onAdapterSelected(int pos);
}
在第一個(gè)活動(dòng)中實(shí)現(xiàn)這樣的接口。
MyAdapter.AdapterCallback callback = new MyAdapter.AdapterCallback() {
@Override
public void onAdapterSelected(int pos) {
Intent intent = new Intent(getApplicationContext(),
SecondActivity.class);
startActivityForResult(intent, 100);
}
};
然后像這樣設(shè)置適配器。
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);
下面適配器的變化。(你應(yīng)該像你已經(jīng)做的那樣傳遞列表數(shù)據(jù)和回調(diào))
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);
}
});
}
接口也來(lái)自內(nèi)部適配器。正如我一開(kāi)始提到的那樣,我不會(huì)在這里重復(fù)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以將color
onclick 事件應(yīng)用于心臟按鈕,如以下代碼:
your_image_id.setBackgroundColor(getResources().getColor(R.color.yellow));
添加回答
舉報(bào)