簡體   English   中英

將數據從適配器發送到廣播接收器並分段接收

[英]Send data from Adapter to broadcast receiver and receive in fragment

從發送數據到接收器並獲取片段

我想接收從適配器傳遞過來的數據,但它甚至沒有被調用

接收器類(該類在Fragement中)

 public class DataReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            if (intent != null) {
                Category category = (Category) intent.getSerializableExtra("category");
                Log.e("data", category.getName());
            }
        } catch (Exception e) {
            Log.e("catch", e.toString());

        }

    }
}

我在下面的片段中創建了接收器,並在此處注冊和注銷了接收器。

AddServiceFragment類(其中有接收器)

  @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        bindViews();
        dataReceiver = new DataReceiver();
        filter = new IntentFilter("action");


    }
@Override
    public void onStart() {
        super.onStart();
        getActivity().registerReceiver(dataReceiver, filter);
    }


    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        getActivity().unregisterReceiver(dataReceiver);
    }

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        getActivity().registerReceiver(dataReceiver, filter);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        getActivity().unregisterReceiver(dataReceiver);

    }

我正在使用以下代碼將數據發送到接收器

適配器代碼

 holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent in = new Intent(context, AddServiceFragment.DataReceiver.class);
            in.setAction("action");
            in.putExtra("category", category);
            context.sendBroadcast(in);
        }
    });

您使用的是錯誤的方式。 請檢查下面的示例代碼。

片段類中的代碼:

@Override
    public void onResume() {
        getActivity().registerReceiver(mReceiverLocation, new IntentFilter("data_action"));
        super.onResume();
    }

    @Override
    public void onPause() {
        getActivity().unregisterReceiver(mReceiverLocation);
        super.onPause();
    }

    private BroadcastReceiver mReceiverLocation = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                Category category = (Category) intent.getSerializableExtra("category");
                Log.e("data", category.getName());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

從適配器類調用:

holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent in = new Intent("data_action");
                in.putExtra("category", category);
                context.sendBroadcast(in);
            }
        });

看看以下內容: https : //developer.android.com/training/basics/fragments/communicating.html您可以通過主機活動在片段之間進行通信。

通常,您會希望一個Fragment與另一個Fragment進行通信,例如,根據用戶事件更改內容。 所有片段到片段的通信都是通過關聯的活動完成的。 兩個片段永遠不要直接通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM