如何使用适配器为recyclerview从字符串的arrayList中的元素获取字符串

问题描述 投票:0回答:1

我已经创建了一个RecyclerView,它被一个ArrayList的字符串夸大了,我想将额外的信息放到下一个活动中以获取信息。我可以在reclyclerview中传递元素的位置(在意图内),但我也想发送出现在该元素中的字符串值。适配器用于recylcerView的布局只有一个TextView用于显示字符串ArrayList中的值。

问题出在适配器中,因为我希望能够将String作为附加信息放入意图中。我需要更改的是ItemClickListener中的onItemClick方法参数,但我不知道下一步该怎么做。

这里是适配器:

Adapter_dishes_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_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp">

    <TextView
        android:id="@+id/nameoftypeofdish"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"/>

</LinearLayout>

然后是主要活动:

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

如果您还有其他需要告诉我,因为我确实需要帮助解决此问题。

android adapter android-adapter onitemclicklistener onitemclick
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.