当前位置: 首页 > 知识库问答 >
问题:

Android:点击回收器视图内的图像按钮时,从Textview传递文本

鲍建业
2023-03-14

所以我有一个回收器视图,有2个文本和1个图像按钮。我想单击图像按钮,然后打开一个新活动,并将文本从text ViewADV1传输到下一个活动

我的项目。我的回收视图中的xml由以下内容组成

 <ImageButton
        android:id="@+id/imageButton1"
        android:clickable="true"
        android:onClick="openActivity2"/>

    <TextView
        android:id="@+id/textViewADV1"
        android:text="Line 1"/>

    <TextView
        android:id="@+id/textViewADV2"
        android:text="Line 2"/>

我的openActivity2()来自主活动

public void openActivity2(View view)
        {
            Intent intentLoadNewActivity = new Intent(AdvancedResults.this,OpenSelectedAdvanced.class);
            startActivity(intentLoadNewActivity);
        }

我尝试做text ViewADV1.getText(). toString()但它只从回收器视图中的第一项读取文本

我的回收器适配器

public class AdvancedAdapter extends RecyclerView.Adapter<AdvancedAdapter.AdvancedViewHolder> {
    private ArrayList<AdvancedItem> mAdvancedList;

公共字符串mImage;

    public static class AdvancedViewHolder extends RecyclerView.ViewHolder {
        public ImageButton mImagebtn;
        public TextView mTextView1;
        public TextView mTextView2;

        public AdvancedViewHolder(View itemView) {
            super(itemView);
            mImagebtn = itemView.findViewById(R.id.imageButtonADV);
            mTextView1 = itemView.findViewById(R.id.textViewADV1);
            mTextView2 = itemView.findViewById(R.id.textViewADV2);
        }
    }

    public AdvancedAdapter(ArrayList<AdvancedItem> advancedList) {
        mAdvancedList = advancedList;
    }

    @Override
    public AdvancedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.advanced_item, parent, false);
        AdvancedViewHolder evh = new AdvancedViewHolder(v);
        return evh;
    }

    @Override
    public void onBindViewHolder(AdvancedViewHolder holder, int position) {
        AdvancedItem currentItem = mAdvancedList.get(position);
        holder.mTextView1.setText(currentItem.getText1());
        holder.mTextView2.setText(currentItem.getText2());
        mImage = "www.testImageURL.com";
        Picasso.get().load(mImage).into(holder.mImagebtn);
    }

    @Override
    public int getItemCount() {
        return mAdvancedList.size();
    }
}

共有2个答案

谈桐
2023-03-14

如果您已经在适配器类中声明了onBindViewHolder(),那么为什么要从MainActivity启动activity呢。您应该在onBindViewHolder()中添加setOnclicklistenr(),以实现所需的结果,方法如下:

public class AdvancedAdapter extends RecyclerView.Adapter<AdvancedAdapter.AdvancedViewHolder> {
private ArrayList<AdvancedItem> mAdvancedList;
//one more thing you have to create Context field so that you can
 //you can start the activity from any context (From Any activity)
 private Context mContext;

  public String mImage;

public static class AdvancedViewHolder extends RecyclerView.ViewHolder        {
    public ImageButton mImagebtn;
    public TextView mTextView1;
    public TextView mTextView2;

    public AdvancedViewHolder(View itemView) {
        super(itemView);
        mImagebtn = itemView.findViewById(R.id.imageButtonADV);
        mTextView1 = itemView.findViewById(R.id.textViewADV1);
        mTextView2 = itemView.findViewById(R.id.textViewADV2);
    }
}

public AdvancedAdapter(ArrayList<AdvancedItem> advancedList, Context mContext) {
    mAdvancedList = advancedList;
    this.mContext = mContext;
}

@Override
public AdvancedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.advanced_item, parent, false);
    AdvancedViewHolder evh = new AdvancedViewHolder(v);
    return evh;
}

@Override
public void onBindViewHolder(AdvancedViewHolder holder, int position) {
    AdvancedItem currentItem = mAdvancedList.get(position);
    holder.mTextView1.setText(currentItem.getText1());
    holder.mTextView2.setText(currentItem.getText2());
    mImage = "www.testImageURL.com";
    holder.mImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Here You start your activity
            Intent intent = new Intent(mContext, Activity2.class);
            //you can putExtras here
            mContext.startActivity(intent);
    });
    Picasso.get().load(mImage).into(holder.mImagebtn);
}

@Override
public int getItemCount() {
    return mAdvancedList.size();
}
   }

现在在你的活动中初始化这个适配器,在那里你实现了回收器视图并将数组列表发送到你的适配器的构造函数的参数中:)如果还不明白,你可以在下面给出的链接上尝试教程:https://www.youtube.com/watch?v=bIppSKk9afI

邓建柏
2023-03-14

首先,在初始化适配器时,将上下文传递给适配器:

//in the main activity that you initialize the adapter in

AdvancedAdapter adapter = new AdvancedAdapter(your_list , MainActivity.this);

现在更改AdvancedAdapter的构造函数以接受上下文

 public class AdvancedAdapter extends RecyclerView.Adapter<AdvancedAdapter.AdvancedViewHolder> {

private ArrayList<AdvancedItem> mAdvancedList;

private Context context;

.............

//constructor

public AdvancedAdapter(ArrayList<AdvancedItem> advancedList,Context context) {
mAdvancedList = advancedList;
this.context = context;
}

现在在onBindViewHolder中的AdvancedAdapter

@Override
public void onBindViewHolder(AdvancedViewHolder holder, int position) {
AdvancedItem currentItem = mAdvancedList.get(position);
holder.mTextView1.setText(currentItem.getText1());
holder.mTextView2.setText(currentItem.getText2());
mImage = "www.testImageURL.com";
Picasso.get().load(mImage).into(holder.mImagebtn);

//on click image button

hodler.mImagebtn.setOnclickListener(new View.OnClickListener(){

@Override
public void onClick(View view){

Intent intent = new Intent(context , OpenSelectedAdvanced.class);
intent.putExtra("data" , currentItem.getText1());
context.startActivity(intent);
}

});

}

要从OpenSelectedAdvanced活动获取数据:

//in oncreate method:

Intent intent = getIntent();

//this is your text view text that came from the clicked image button
String transferedText = intent.getStringExtra("data");
 类似资料:
  • 在init2()中标识按钮Id的行上,我得到响应“尝试对空对象引用调用虚拟方法'Android.content.pm.applicationInfo Android.content.context.GetApplicationInfo()'”;

  • 我正在设计一个Gridview,其中每个项目都有一个TextView和ImageView。我试图找到关于如何使ImageView可点击以及GridView项目本身(两者都会触发不同的方法())的教程(逐步更新和清晰的教程)。 这就是我目前掌握的: Activity.java GV适配器.java 结果: 当Item1(Textview)被点击时,它应该点击整个Item并触发GridView的OnI

  • 我能找到的每个更改按钮图像的示例都显示了当单击该按钮时如何更改它。但是我如何点击一个切换按钮,并让它改变一个常规按钮的图像呢? 关于更多细节,我有两个按钮和一个onCheckedChanged事件: 当按下切换按钮并发生onCheckedChanged事件时,我需要将btn1的背景设置为新图像。

  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 我有一个底部工作表片段,有两个片段,其中一个片段有一个里面有一个按钮的回收器视图。我需要的是,如果用户点击那个按钮,它会滑动到第二个片段,并传递文本视图的标题。一切都很好,但是如果可能的话,我不知道如何使用我的编码想法。我试着寻找答案,但是没有一个对我有用。 我需要的是 打开回收器视图中按钮的碎片 任何帮助将不胜感激/请使用java或kotlin 我的回收器视图适配器 我的碎片 P. C.我没有在

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我