亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將數據從一個活動傳遞到另一個活動

如何將數據從一個活動傳遞到另一個活動

陪伴而非守候 2023-02-23 17:22:05
我正在創建一個事件應用程序,其中包含recyclerview.事件recyclerview包括事件名稱、圖像、日期和時間、心形圖像(例如:Instagram 上的心形按鈕),當用戶單擊“感興趣”按鈕時,它會改變顏色。單擊任何事件后,會出現其描述,并且有兩個按鈕:“感興趣”和“參加”。如果用戶單擊“感興趣”,則心形顏色recyclerview將變為黃色。該事件還將保存在另一個列表中,直到該事件從保存的列表中刪除。到目前為止,我已經通過單擊“感興趣”按鈕將該事件保存在已保存列表中。但我不知道如何同時更改心形顏色以及如何讓它保持不變,直到事件從保存的列表中刪除。我的 recyclerview 中有心臟圖像。當我在描述活動中單擊興趣按鈕時,recyclerview 中的心臟圖像會發生變化。
查看完整描述

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,并為每個匹配的事件更改心臟。


查看完整回答
反對 回復 2023-02-23
?
富國滬深

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();

        }     

    }


查看完整回答
反對 回復 2023-02-23
?
MMTTMM

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);

                }



   });

    }

接口也來自內部適配器。正如我一開始提到的那樣,我不會在這里重復


查看完整回答
反對 回復 2023-02-23
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

您可以將coloronclick 事件應用于心臟按鈕,如以下代碼:

your_image_id.setBackgroundColor(getResources().getColor(R.color.yellow));


查看完整回答
反對 回復 2023-02-23
  • 4 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號