我有一个firebase recyclerview列表,当我单击一个按钮时,我希望它在另一个活动中打开该列表中数据的详细信息

问题描述 投票:0回答:1

我创建了一个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();
    }


 */
}

我被困住了,关于如何进行的想法已经用尽。请帮助。

java android firebase android-recyclerview onclicklistener
1个回答
0
投票

尝试一下,

适配器

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


 */
}

您可以通过将活动本身传递给构造函数来直接在适配器上调用活动方法。

© www.soinside.com 2019 - 2024. All rights reserved.