如何使用 Recyclerview 的适配器从字符串数组列表中的元素获取字符串
How to get a string from an element in an arrayList of strings using an Adapter for a recyclerview
我创建了一个 RecyclerView,它被一个字符串的 ArrayList 膨胀了,我想将额外的信息放入一个 intent 中,以便下一个 activity 获取信息。我可以传递元素在 reclyclerview 中的位置(在意图内),但我也想发送出现在该元素中的字符串值。适配器用于 recylcerView 的布局只有一个 TextView,用于显示字符串 ArrayList 中的值。
问题出在适配器中,因为我希望能够将字符串作为额外信息放入意图中。而我要改的是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>
然后是主要的 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);
}
}
如果您还需要什么,请告诉我,因为我真的需要帮助解决这个问题。
您可以将以下功能添加到您的适配器中
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);
}
现在您的 activity 中有了所需的字符串,您可以将其传递给 Intent
我创建了一个 RecyclerView,它被一个字符串的 ArrayList 膨胀了,我想将额外的信息放入一个 intent 中,以便下一个 activity 获取信息。我可以传递元素在 reclyclerview 中的位置(在意图内),但我也想发送出现在该元素中的字符串值。适配器用于 recylcerView 的布局只有一个 TextView,用于显示字符串 ArrayList 中的值。
问题出在适配器中,因为我希望能够将字符串作为额外信息放入意图中。而我要改的是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>
然后是主要的 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);
}
}
如果您还需要什么,请告诉我,因为我真的需要帮助解决这个问题。
您可以将以下功能添加到您的适配器中
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);
}
现在您的 activity 中有了所需的字符串,您可以将其传递给 Intent