Как перенести строку из TextView в основное действие с помощью слушателя onClick - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу создать прослушиватель onclick, который читает строку из одного TextView, а затем я каким-то образом передаю эту строку в основное действие, чтобы открыть третье действие

Так что мое основное действие выглядит так

public class AdvancedResults extends AppCompatActivity {
private RecyclerView mRecyclerView;
private AdvancedAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private ArrayList<String> mNames = new ArrayList<>();
private ArrayList<String> mImageUrls = new ArrayList<>();
private ArrayList<String> saved_recipes_with_ingredients = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_advanced_results);
    advancedList.add(new AdvancedItem(R.drawable.ic_android, "test1", "test2");
    advancedList.add(new AdvancedItem(R.drawable.ic_android, "test3", "test4");
    mRecyclerView = findViewById(R.id.recyclerView1);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mAdapter = new AdvancedAdapter(advancedList);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(mAdapter);
    mAdapter.setOnItemClickListener(new AdvancedAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(int position) {
            // I want to open a new activity and append the string from the TextView here (maybe with get/set)
        }
    });
}

А мой адаптер для утилизации выглядит так

public class AdvancedAdapter extends RecyclerView.Adapter<AdvancedAdapter.AdvancedViewHolder> {
private ArrayList<AdvancedItem> mAdvancedList;
private OnItemClickListener mListener;
public interface OnItemClickListener {
    void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
    mListener = listener;
}
public static class AdvancedViewHolder extends RecyclerView.ViewHolder {
    public ImageView mImageView;
    public TextView mTextView1;
    public TextView mTextView2;
    public AdvancedViewHolder(View itemView, final OnItemClickListener listener) {
        super(itemView);
        mImageView = itemView.findViewById(R.id.imageViewADV);
        mTextView1 = itemView.findViewById(R.id.textViewADV1);
        mTextView2 = itemView.findViewById(R.id.textViewADV2);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    int position = getAdapterPosition();
                    //how do I get the string from the TextView and pass it onto the main class?
                    if (position != RecyclerView.NO_POSITION) {
                        listener.onItemClick(position);
                    }
                }
            }
        });
    }
}
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, mListener);
    return evh;
}
@Override
public void onBindViewHolder(AdvancedViewHolder holder, int position) {
    AdvancedItem currentItem = mAdvancedList.get(position);

    holder.mImageView.setImageResource(currentItem.getImageResource());
    holder.mTextView1.setText(currentItem.getText1());
    holder.mTextView2.setText(currentItem.getText2());
}
@Override
public int getItemCount() {
    return mAdvancedList.size();
}

Я просто не уверен, как я должен это делать и какой метод использовать.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Вы можете использовать интерфейс для передачи второго параметра String. Так что просто добавьте один строковый параметр, как это -

public interface OnItemClickListener {
    void onItemClick(int position, String text);
}

И в адаптере передайте строку по нажатию элемента вместе с позицией

listener.onItemClick(position, mTextView1.getText().toString());

И в упражнении вы получите текст строки, оттуда вы можете передать его в ThirdActivity через пакет.

   mAdapter.setOnItemClickListener(new AdvancedAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(int position, String textData) {
           Intent i = new Intent(this, ThirdActivity.class);   
i.putExtra("TEXT_KEY", textData);
        }
    });

Надеюсь, это поможет !!

0 голосов
/ 09 апреля 2020

Итак, если вы хотите, чтобы текст из текстового представления выполнялся:

String text = textViewId.getText();

Но в вашем случае вы хотите добавить текст для каждого из представлений в списке

Итак, на адаптере, как сделать прослушиватель по щелчку:

            if (listener != null) {
                int position = getAdapterPosition();


                String text = mTextView1.getText();

                Intent i = new Intent(getApplicationContext(), YourActitivity.class);  
                i.putExtra("nameYouWant", text)
                startActivity(i);  


                if (position != RecyclerView.NO_POSITION) {
                    listener.onItemClick(position);
                }

Теперь о вашей активности:

String text = intent.getStringExtra("nameYouWant");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...