BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.this , "Main" , Toast.LENGTH_SHORT).show();
MessagesFragment messagesFragment = new MessagesFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container , messagesFragment)
.commit();
}
};
I have passed this broadcast from Recyclerview Adapter onClick to MainActivity . When I click on each item, I can see the toast but the MessagesFragment doesn't start..
You should not using BroadcastReceiver
to communicate with Activity from an Adapter. Instead, you need to use Listener/Callback. You can follow something like below.
First, modify your Adapter to add an interface as the listener:
public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> {
// ...
// Create the listener.
private OnItemClickListener listener;
// Define the listener interface
public interface OnItemClickListener {
void onItemClick(int position);
}
// define the listener to be used by the Activity.
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
public class ViewHolder extends RecyclerView.ViewHolder {
...
public ViewHolder(final View itemView) {
...
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
listener.onItemClick(position);
}
}
}
});
}
}
// ...
}
Then, in your Activity where the adapter reside, you need to set the listener:
YourAdapter adapter = ...;
// populate the adapter
// and anything related to the adapter initialization.
// then set the listener
adapter.setOnItemClickListener(new YourAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
// Do something when clicked.
MessagesFragment messagesFragment = new MessagesFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container , messagesFragment)
.commit();
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.