Android 按下单选按钮后,将数据从recyclerview传递到新活动

Android 按下单选按钮后,将数据从recyclerview传递到新活动,android,android-recyclerview,Android,Android Recyclerview,我有一个带有radiobutton的recyclerview,目的是在用户选择“不合适”单选按钮时出现一个弹出窗口(对话),从中会出现选项,并根据用户从这些选项中的选择,将使用recyclerview中的信息打开一个新活动 到目前为止,我已经能够进行对话和活动,但我遇到的问题是如何将来自recyclerview的数据纳入新的活动中 我读过类似的文章,没有人能得到我需要的答案 主要活动 ////Firebase Adapter and related properties F

我有一个带有radiobutton的recyclerview,目的是在用户选择“不合适”单选按钮时出现一个弹出窗口(对话),从中会出现选项,并根据用户从这些选项中的选择,将使用recyclerview中的信息打开一个新活动

到目前为止,我已经能够进行对话和活动,但我遇到的问题是如何将来自recyclerview的数据纳入新的活动中

我读过类似的文章,没有人能得到我需要的答案

主要活动

////Firebase Adapter and related properties

        FirebaseRecyclerOptions<Drugs> options = new FirebaseRecyclerOptions.Builder<Drugs>()
                .setQuery(query, Drugs.class).build();

        adapter = new FirebaseRecyclerAdapter<Drugs, DrugsViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull DrugsViewHolder holder, final int position, @NonNull Drugs model) {
                holder.setDiag1(model.getBrand());
                holder.setDiag2(model.getGeneric());
                holder.setDiag3(model.getDose());
                holder.setDiag4(model.getFrequency1(), model.getFrequency2(), model.getDuration());



            }

            @NonNull
            @Override
            public DrugsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

                ////Recycler view item
                View view = LayoutInflater.from(viewGroup.getContext())
                        .inflate(R.layout.drug_display_list,viewGroup,false);///
                return new DrugsViewHolder(view);
            }
        };

        patient_drug_list.setLayoutManager(new LinearLayoutManager(this));
        patient_drug_list.setAdapter(adapter);//// setting adapter
        adapter.notifyDataSetChanged();
        adapter.startListening();
    }

    @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();
        adapter.notifyDataSetChanged();
    }

    public void rbclick(View view) {
        ////Activated when ever a user presses the "non-appropriate" radiobutton

        AlertDialog.Builder myDialog = new AlertDialog.Builder(Review2.this);
        LayoutInflater inflater = LayoutInflater.from(Review2.this);
        View myview = inflater.inflate(R.layout.adr_options, null);
        myDialog.setView(myview);
        myDialog.show();

    }


////////////////click for new option activities

           //This is a switch for the adio button options that appear after the above radiobutton
    public void clickers(View view) {
        switch (view.getId()){
            case  R.id.drug_needed:
                startActivity(new Intent(getApplicationContext(),Drug_needed.class));
                break;


            case R.id.wrong_drug:
                Toast.makeText(Review2.this, "2nd", Toast.LENGTH_SHORT).show();
                break;

            case R.id.dose_related:
                startActivity(new Intent(getApplicationContext(),Dose.class));
                break;
            case R.id.adverse_reaction:
                startActivity(new Intent(getApplicationContext(),ADR.class));
                break;

            case R.id.food_interaction:
                Toast.makeText(this, "yet to do", Toast.LENGTH_SHORT).show();
                break;

            default:
                Toast.makeText(Review2.this, "nothing to see", Toast.LENGTH_SHORT).show();
                break;
        }
    }


    ////////////////View Holder

    private class DrugsViewHolder extends  RecyclerView.ViewHolder{
        View mView;
        DrugsViewHolder(@NonNull View itemView) {
            super(itemView);
            mView = itemView;



        }



        void setDiag1(String diag1){
            TextView postdiag1 = mView.findViewById(R.id.brand);
            postdiag1.setText(diag1);

        }
        void setDiag2(String diag2){
            TextView postdiag2 = mView.findViewById(R.id.generic);
            postdiag2.setText(diag2);
            postdiag2.setTextSize(12);
        }
        public void setDiag3(String diag3){
            TextView postdiag3 = mView.findViewById(R.id.dose);
            postdiag3.setText("Dose:" + diag3);
        }
        public void setDiag4(String diag4, String diag5, String diag6){
            TextView postdiag4 = mView.findViewById(R.id.frequency);
            postdiag4.setText("Frequency:" + diag4 + " tab " + diag5+"x" + "daily for "+diag6 + "days");
        }
    }
///Firebase适配器和相关属性
FirebaseRecyclerOptions选项=新建FirebaseRecyclerOptions.Builder()
.setQuery(查询,Drugs.class).build();
适配器=新的FirebaseRecyclerAdapter(选项){
@凌驾
BindViewHolder上的受保护无效(@NonNull DrugsViewHolder holder,最终int位置,@NonNull Drugs model){
holder.setDiag1(model.getBrand());
setDiag2(model.getGeneric());
holder.setDiag3(model.getDose());
setDiag4(model.getFrequency1(),model.getFrequency2(),model.getDuration());
}
@非空
@凌驾
public DrugsViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
////回收器视图项
View=LayoutFlater.from(viewGroup.getContext())
.充气(右布局、药物显示列表、视图组、假)///
返回新药品查看文件夹(视图);
}
};
患者列表。setLayoutManager(新直线布局经理(本));
患者药物列表。设置适配器(适配器);//设置适配器
adapter.notifyDataSetChanged();
adapter.startListening();
}
@凌驾
受保护的void onStart(){
super.onStart();
adapter.startListening();
adapter.notifyDataSetChanged();
}
公共无效RB单击(查看){
////当用户按下“不合适”单选按钮时激活
AlertDialog.Builder myDialog=新建AlertDialog.Builder(Review2.this);
LayoutInflater充气机=LayoutInflater.from(查看2.this);
视图myview=充气机。充气(R.layout.adr\u选项,空);
myDialog.setView(myview);
myDialog.show();
}
////////////////单击此处可查看新选项活动
//这是显示在上述单选按钮之后的adio按钮选项的开关
公共作废点击器(视图){
开关(view.getId()){
案例R.id.drug_需要:
startActivity(新意图(getApplicationContext(),Drug_needed.class));
打破
病例R.id.错误药物:
Toast.makeText(查看2.this,“第二”,Toast.LENGTH_SHORT.show();
打破
病例R.id.剂量相关:
startActivity(新意图(getApplicationContext(),Dose.class));
打破
病例R.id.不良反应:
startActivity(新意图(getApplicationContext(),ADR.class));
打破
案例R.id.food_互动:
Toast.makeText(这个“尚未完成”,Toast.LENGTH_SHORT.show();
打破
违约:
Toast.makeText(查看2.this,“没什么可看”,Toast.LENGTH_SHORT.show();
打破
}
}
////////////////视图持有者
私有类DrugsViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
DrugsViewHolder(@NonNull-View-itemView){
超级(项目视图);
mView=项目视图;
}
void setDiag1(字符串diag1){
TextView postdiag1=mView.findviewbyd(R.id.brand);
postdiag1.setText(diag1);
}
void setDiag2(字符串diag2){
TextView postdiag2=mView.findviewbyd(R.id.generic);
postdiag2.setText(diag2);
后诊断2.SettexSize(12);
}
公共无效集合diag3(字符串diag3){
TextView postdiag3=mView.findViewById(R.id.dose);
诊断后3.setText(“剂量:+diag3”);
}
公共无效集合diag4(字符串diag4、字符串diag5、字符串diag6){
TextView postdiag4=mView.findviewbyd(R.id.frequency);
postdiag4.setText(“频率:“+diag4+”选项卡“+diag5+”x“+”每日“+diag6+”天”);
}
}
Recyclerview布局(仅显示具有onClick功能的单选按钮)


下面是我想做的事情的图片摘要


如果您有任何想法、建议或链接,我将不胜感激。

RecyclerView只需将输入参数传递到显示AlertDialog的方法中,即可将信息传递到AlertDialog。然后,AlertDialog可以使用Intent extras将该数据传递给下一个活动

DrugsViewHolder(@NonNull View itemView) {
    super(itemView);
    mView = itemView;
    RadioButton radioButton = mView.findViewById(appropraite);
    radioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //open AlertDialog
        }
    });


}

你没有设置额外的意图 例如,您希望将“这是一个示例数据”发送到另一个活动

//set data int current activity
Intent intent = new Intent(getApplicationContext(),ADR.class);
intent.putExtra("key","this is a sample data");
startActivity(intent);
在ADR活动中:

//get data in activity ADR
String newString= extras.getString("key");

我希望这对您有所帮助

这更像是一个建议,您是否尝试过在onCreateViewHolder中使用索引设置视图的标记

view.setTag(i); //i is the position that the view in the recycle view
而不是在您的Activity onClick功能中您应该执行的操作

int index = (int)view.getTag();//view that the onClick function is getting
通过索引,您可以执行以下操作:

Data currentItem = dataSet.get(index); //get the data you need to pass to the alert dialog 

我通常在列表视图和循环视图中都是这样做的(尽管我需要将ClickListener设置为循环视图的布局)

您打算在哪里进行其他活动?我看不出是的,通过警报对话框中的单选按钮,我将尝试此操作并返回给您。感谢快速回复。我使用单选按钮xml文件中的onclick属性,如何获取数据以将其传递到警报对话框中。数据只能从onBindViewHolder方法中获取,而我没有
Data currentItem = dataSet.get(index); //get the data you need to pass to the alert dialog