我创建了一个Firebase RecyclerView
列表,可从Firebase读取数据。现在,我在要单击的每个列表项上附加了一个按钮,以便它将显示在新Activity
上单击的数据的详细信息。请帮我解决问题。这是我的Adapter
:
public class ResponseAdapter extends
RecyclerView.Adapter<ResponseAdapter.ResponseHolder> {
Context context;
ArrayList<Responses> dataList = new ArrayList<>();
public ResponseAdapter(Context con, ArrayList<Responses> list)
{
context = con;
dataList = list;
}
@NonNull
@Override
public ResponseHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context)
.inflate(R.layout.row_response_view_all, parent, false);
ResponseHolder responseHolder = new ResponseHolder(view);
return responseHolder;
}
@Override
public void onBindViewHolder(@NonNull ResponseHolder holder, int position) {
Responses responses = dataList.get(position);
String name = responses.getName();
String email = responses.getEmail();
String message = responses.getMessage();
String latitude = responses.getLatitude();
String longitude = responses.getLongitude();
holder.username.setText(name);
holder.useremail.setText(email);
holder.usermessage.setText(message);
holder.userlatitude.setText(latitude);
holder.userlongitude.setText(longitude);
holder.respondBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Responses responses1 = dataList.get(position);
}
});
}
@Override
public int getItemCount() {
return dataList.size();
}
public class ResponseHolder extends RecyclerView.ViewHolder{
@BindView(R.id.user_name)
TextView username;
@BindView(R.id.user_message)
TextView usermessage;
@BindView(R.id.user_email)
TextView useremail;
@BindView(R.id.user_latitude)
TextView userlatitude;
@BindView(R.id.user_longitude)
TextView userlongitude;
@BindView(R.id.del_btn)
ImageView deleteBtn;
@BindView(R.id.respond)
ImageView respondBtn;
public ResponseHolder(@NonNull View itemView){
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
这是我的MainActivity
:
public class PoliceResponse extends AppCompatActivity {
@BindView(R.id.policeresponse)
RecyclerView recyclerView;
ArrayList<Responses> allResponseList = new ArrayList<>();
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
ProgressDialog progressDialog;
DatabaseReference databaseReference;
LinearLayoutManager linearLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_police_response);
ButterKnife.bind(this);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading Messages");
sharedPreferences =
getSharedPreferences("FIRENOTESDATA", Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
// FirebaseUser users = FirebaseAuth.getInstance().getCurrentUser();
// String uid = users.getUid();
databaseReference = FirebaseDatabase.getInstance()
.getReference("Police")
.child("Emergency Messages");
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
showAllMessages();
}
public void showAllMessages()
{
allResponseList.clear();
progressDialog.show();
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren())
{
Responses response = snapshot.getValue(Responses.class);
allResponseList.add(response);
}
progressDialog.dismiss();
ResponseAdapter responseAdapter = new ResponseAdapter(PoliceResponse.this, allResponseList);
recyclerView.setAdapter(responseAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
/*
public void onResume() {
super.onResume();
showAllMessages();
}
*/
}
我被困住了,关于如何进行的想法已经用尽。请帮助。
尝试一下,
适配器
public class ResponseAdapter extends
RecyclerView.Adapter<ResponseAdapter.ResponseHolder> {
PoliceResponse activity;
Context context;
ArrayList<Responses> dataList = new ArrayList<>();
public ResponseAdapter( PoliceResponse activity, Context con, ArrayList<Responses> list)
{
this.activity = activity
context = con;
dataList = list;
}
@NonNull
@Override
public ResponseHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context)
.inflate(R.layout.row_response_view_all, parent, false);
ResponseHolder responseHolder = new ResponseHolder(view);
return responseHolder;
}
@Override
public void onBindViewHolder(@NonNull ResponseHolder holder, int position) {
Responses responses = dataList.get(position);
String name = responses.getName();
String email = responses.getEmail();
String message = responses.getMessage();
String latitude = responses.getLatitude();
String longitude = responses.getLongitude();
holder.username.setText(name);
holder.useremail.setText(email);
holder.usermessage.setText(message);
holder.userlatitude.setText(latitude);
holder.userlongitude.setText(longitude);
holder.respondBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Responses responses1 = dataList.get(position);
activity.yourMethod(responses1);
}
});
}
@Override
public int getItemCount() {
return dataList.size();
}
public class ResponseHolder extends RecyclerView.ViewHolder{
@BindView(R.id.user_name)
TextView username;
@BindView(R.id.user_message)
TextView usermessage;
@BindView(R.id.user_email)
TextView useremail;
@BindView(R.id.user_latitude)
TextView userlatitude;
@BindView(R.id.user_longitude)
TextView userlongitude;
@BindView(R.id.del_btn)
ImageView deleteBtn;
@BindView(R.id.respond)
ImageView respondBtn;
public ResponseHolder(@NonNull View itemView){
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
活动
public class PoliceResponse extends AppCompatActivity {
@BindView(R.id.policeresponse)
RecyclerView recyclerView;
ArrayList<Responses> allResponseList = new ArrayList<>();
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
ProgressDialog progressDialog;
DatabaseReference databaseReference;
LinearLayoutManager linearLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_police_response);
ButterKnife.bind(this);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading Messages");
sharedPreferences =
getSharedPreferences("FIRENOTESDATA", Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
// FirebaseUser users = FirebaseAuth.getInstance().getCurrentUser();
// String uid = users.getUid();
databaseReference = FirebaseDatabase.getInstance()
.getReference("Police")
.child("Emergency Messages");
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
showAllMessages();
}
/**
* @param responses
* */
public void yourMethod(Responses responses){
//TODO something work..
}
public void showAllMessages()
{
allResponseList.clear();
progressDialog.show();
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren())
{
Responses response = snapshot.getValue(Responses.class);
allResponseList.add(response);
}
progressDialog.dismiss();
ResponseAdapter responseAdapter = new ResponseAdapter(PoliceResponse.this, allResponseList);
recyclerView.setAdapter(responseAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
/*
public void onResume() {
super.onResume();
showAllMessages();
}
*/
}
您可以通过将活动本身传递给构造函数来直接在适配器上调用活动方法。