Android: передача текста из Textview при нажатии кнопки «Изображение» внутри представления рециркулятора - PullRequest
0 голосов
/ 24 апреля 2020

Итак, у меня есть вид рециркулятора с 2 текстами и 1 кнопкой изображения. Я хочу нажать кнопку с изображением, а затем открыть новый вид деятельности и перенести текст из textViewADV1 в следующий вид деятельности

Мои предметы. 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);
        }

Я пытался выполнить textViewADV1.getText().toString(), но он считывает текст только с первого элемента в представлении утилизатора

Мой адаптер утилизатора

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

publi c 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) {
        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 ]

1 голос
/ 24 апреля 2020

Прежде всего передайте context вашему adapter при инициализации:

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

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

Теперь измените конструктор AdvancedAdapter, чтобы принять context

 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");
0 голосов
/ 24 апреля 2020

Если вы объявили onBindViewHolder () в классе адаптера, почему вы начинаете работу с MainActivity. Вы должны добавить setOnclicklistenr () в onBindViewHolder () для достижения желаемого результата, который вы хотите получить следующим образом:

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

Теперь инициализируйте этот адаптер в своей деятельности, где вы внедрили recyclerView и отправьте этот массив в параметры этого конструктора вашего адаптера :) если вы еще не поняли, вы можете попробовать учебник по ссылке, приведенной ниже: https://www.youtube.com/watch?v=bIppSKk9afI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...