如何使用适配器为recyclerview从字符串数组列表中的元素获取字符串

Posted

技术标签:

【中文标题】如何使用适配器为recyclerview从字符串数组列表中的元素获取字符串【英文标题】:How to get a string from an element in an arrayList of strings using an Adapter for a recyclerview 【发布时间】:2020-10-03 02:37:41 【问题描述】:

我创建了一个 RecyclerView,它使用字符串的 ArrayList 进行膨胀,我想将额外的信息放入一个意图中,以便下一个活动获取信息。我可以在 recyclerview 中传递元素的位置(在意图内),但我也想发送出现在该元素中的字符串值。适配器用于recyclerView的布局只有一个TextView,用于显示字符串ArrayList中的值。

问题出在适配器中,因为我希望能够将字符串作为额外信息放入意图中。而我要改的是ItemClickListener里面的onItemClick方法参数,但是不知道接下来要做什么。

这是适配器:

Adapter_disshes_rv.java

public class Adapter_dishes_rv extends RecyclerView.Adapter<Adapter_dishes_rv.ViewHolder> 

    private List<String> mData;
    private LayoutInflater mInflater;
    private ItemClickListener mClickListener;

    Adapter_dishes_rv(Context context, List<String> data) 
        this.mInflater = LayoutInflater.from(context);
        this.mData = data;
    

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
        View view = mInflater.inflate(R.layout.recyclerview_simple_layout, parent, false);
        return new ViewHolder(view);
    

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) 
        String animal = mData.get(position);
        holder.myTextView.setText(animal);
    

    @Override
    public int getItemCount() 
        return mData.size();
    


    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 
        TextView myTextView;

        ViewHolder(View itemView) 
            super(itemView);
            myTextView = itemView.findViewById(R.id.nameoftypeofdish);
            itemView.setOnClickListener(this);
        

        @Override
        public void onClick(View view) 
            if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
        
    

    String getItem(int id) 
        return mData.get(id);
    

    void setClickListener(ItemClickListener itemClickListener) 
        this.mClickListener = itemClickListener;
    

    public interface ItemClickListener 
        void onItemClick(View view, int position);
    

我认为我需要更改的只是 OnItemClick 参数,但还有什么?

这是布局以防万一:

recyclerview_simple_layout.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:padding="10dp">

    <TextView
        android:id="@+id/nameoftypeofdish"
        android:layout_
        android:layout_
        android:textSize="20sp"/>

</LinearLayout>

然后是主Activity:

FoodFamilyActivity.java

public class FoodFamilyActivity extends Activity implements Adapter_dishes_rv.ItemClickListener 

    Adapter_dishes_rv adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_food_family);

        ArrayList<String> dishesOfAFamily = new String[]"Sopa de pobre", "Sopa de pescado", "Sopa de sobre"
        RecyclerView recyclerView = findViewById(R.id.FamilyDishes);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new Adapter_dishes_rv(this, dishesOfAFamily);
        adapter.setClickListener(this);
        recyclerView.setAdapter(adapter);
    
    @Override
    public void onItemClick(View view, int position) 
        Intent intent = new Intent(FoodFamilyActivity.this, DishActivity.class);
        intent.putExtra(DishActivity.EXTRA_DISHNO, (int) position);
        startActivity(intent);
    

如果您需要任何其他信息,请告诉我,因为我真的需要帮助解决这个问题。

【问题讨论】:

【参考方案1】:

您可以将以下功能添加到您的适配器中

public String getDishForPosition(int position) 
        if (mData != null && mData.size() > 0) 
            return mData.get(position);
        
        return null;
    

您已经使用getAdapterPosition() 获得相关职位。使用上述函数,您可以从列表中获取字符串。

将你的界面改为

public interface ItemClickListener 
        void onItemClick(View view, int position,String dishes);
    

现在您的活动中有所需的字符串,您可以将其传递给 Intent

【讨论】:

乐于助人:)

以上是关于如何使用适配器为recyclerview从字符串数组列表中的元素获取字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 recyclerview 适配器中将 API 日期转换为 Kotlin 中的字符串?

如何从recyclerview适配器获取选定项目的数量?

从RecyclerView适配器更新活动或片段的视图

如何从另一个项目更新recyclerview项目中的数据?

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何以编程方式从“recyclerView”适配器中选择底部导航菜单?