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