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));
添加回答
舉報