如何通过onClick监听器将TextView中的字符串传递到主活动中

huangapple 未分类评论46阅读模式
英文:

How to transfer string from TextView to main activity with onClick listener

问题

以下是翻译好的部分:

我想创建一个点击监听器,从一个 TextView 中读取字符串,然后以某种方式将该字符串传递到主活动,以便打开第三个活动。

我的主活动如下所示:

public class AdvancedResults extends AppCompatActivity {
    // ...(省略其他代码)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_advanced_results);
        // ...(省略其他代码)

        mAdapter.setOnItemClickListener(new AdvancedAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                // 我想在此处打开一个新活动,并在此处附加来自 TextView 的字符串(可能使用 get/set 方法)
            }
        });
    }
}

我的 RecyclerView 适配器如下所示:

public class AdvancedAdapter extends RecyclerView.Adapter<AdvancedAdapter.AdvancedViewHolder> {
    // ...(省略其他代码)

    public static class AdvancedViewHolder extends RecyclerView.ViewHolder {
        // ...(省略其他代码)

        public AdvancedViewHolder(View itemView, final OnItemClickListener listener) {
            super(itemView);
            // ...(省略其他代码)

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null) {
                        int position = getAdapterPosition();
                        // 如何从 TextView 获取字符串并将其传递到主类?
                        if (position != RecyclerView.NO_POSITION) {
                            listener.onItemClick(position);
                        }
                    }
                }
            });
        }
    }

    // ...(省略其他代码)

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

    // ...(省略其他代码)
}

我不太确定应该如何做到这一点以及应该使用哪种方法。

英文:

I want to create an onclick listener that reads the String from one TextView and then I somehow pass that string onto the main activity in order to open a third activity

So my main activity looks like this

public class AdvancedResults extends AppCompatActivity {
private RecyclerView mRecyclerView;
private AdvancedAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private ArrayList&lt;String&gt; mNames = new ArrayList&lt;&gt;();
private ArrayList&lt;String&gt; mImageUrls = new ArrayList&lt;&gt;();
private ArrayList&lt;String&gt; saved_recipes_with_ingredients = new ArrayList&lt;&gt;();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_advanced_results);
    advancedList.add(new AdvancedItem(R.drawable.ic_android, &quot;test1&quot;, &quot;test2&quot;);
	advancedList.add(new AdvancedItem(R.drawable.ic_android, &quot;test3&quot;, &quot;test4&quot;);
    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)
        }
    });
}

And my recycler adapter looks like this

public class AdvancedAdapter extends RecyclerView.Adapter&lt;AdvancedAdapter.AdvancedViewHolder&gt; {
private ArrayList&lt;AdvancedItem&gt; 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&lt;AdvancedItem&gt; 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();
}

i'm just not sure how im supposed to do that and what method to use.

答案1

得分: 0

如果您想从文本视图中获取文本,您可以这样做:

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");

请注意,上述代码中的双引号(")是代码中的一部分,用于指示字符串文字。

英文:

So if you want the text from the text view you do:

String text = textViewId.getText();

But in your case you want to add the text for each one of the views on the list

So on the adapter how make a on click listener:

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


                String text = mTextView1.getText();

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


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

Now on your activity :

String text = intent.getStringExtra(&quot;nameYouWant&quot;);

答案2

得分: 0

可以使用接口传递第二个字符串参数。只需像这样添加一个字符串参数:

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

希望这能有所帮助!

英文:

You can use interface to pass the second String param. So just add one String param like this -

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

And in adapter pass the string on click of the item along with the position

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

And in the activity, you will receive the String text, from there you can pass it to ThirdActivity via bundle.

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

Hope it will help!!

huangapple
  • 本文由 发表于 2020年4月9日 05:01:49
  • 转载请务必保留本文链接:https://java.coder-hub.com/61109963.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定