Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何为我的RecyclerView行设置两个不同的文本?_Android_Android Recyclerview - Fatal编程技术网

Android 如何为我的RecyclerView行设置两个不同的文本?

Android 如何为我的RecyclerView行设置两个不同的文本?,android,android-recyclerview,Android,Android Recyclerview,我有一个带有row.xml的recycler视图,其中包括两个文本视图和一些按钮。我试图实现的是让用户在calendarView上选择一个日期并将其更改为字符串。之后,它还应该显示用户输入的项的名称。我的问题是,不是将日期和项目名称放在一行中。它显示了在每个文本视图中具有相同值的两行。所以我举个例子。第1行=文本视图(Hello),文本视图(Hello) 第2行=文本视图(3月14日),文本视图(3月14日) 这是我的再生水 public class ItemRecyclerViewAdapte

我有一个带有row.xml的recycler视图,其中包括两个文本视图和一些按钮。我试图实现的是让用户在calendarView上选择一个日期并将其更改为字符串。之后,它还应该显示用户输入的项的名称。我的问题是,不是将日期和项目名称放在一行中。它显示了在每个文本视图中具有相同值的两行。所以我举个例子。第1行=文本视图(Hello),文本视图(Hello) 第2行=文本视图(3月14日),文本视图(3月14日)

这是我的再生水

public class ItemRecyclerViewAdapter extends RecyclerView.Adapter<ItemRecyclerViewAdapter.ViewHolder>{

private ArrayList<String> mDataset;

public ItemRecyclerViewAdapter(ArrayList<String> mDataset){
    this.mDataset = mDataset;
}

@Override
public ItemRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.recycler_view_row_inventory, parent, false);

    ViewHolder vh = new ViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(ItemRecyclerViewAdapter.ViewHolder holder, int position) {
    holder.mItemName.setText(mDataset.get(position));
    holder.mItemDate.setText(mDataset.get(position));

}

@Override
public int getItemCount() {
    return mDataset.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    public TextView mItemName;
    public TextView mItemDate;

    public ViewHolder(View itemView) {
        super(itemView);
        mItemName = itemView.findViewById(R.id.ItemNameTxtView);
        mItemDate = itemView.findViewById(R.id.expirationDateTxtView);
    }
}
公共类ItemRecycleServiceAdapter扩展了RecyclerView.Adapter{
私有ArrayList数据集;
公共项RecycleServiceAdapter(ArrayList mDataset){
this.mDataset=mDataset;
}
@凌驾
public itemRecycleServiceAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext())
.充气(R.layout.recycler\u view\u row\u inventory,父项,错误);
视窗支架vh=新视窗支架(v);
返回vh;
}
@凌驾
BindViewHolder上的公共无效(ItemRecycleServiceAdapter.ViewHolder,int位置){
holder.mItemName.setText(mDataset.get(position));
holder.mItemDate.setText(mDataset.get(position));
}
@凌驾
public int getItemCount(){
返回mDataset.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图mItemName;
公共文本视图mItemDate;
公共视图持有者(视图项视图){
超级(项目视图);
mItemName=itemView.findViewById(R.id.ItemNameTxtView);
mItemDate=itemView.findViewById(R.id.expirationDateTxtView);
}
}
这是我的活动

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

    mDataset = new ArrayList<>();

    mRecyclerView = findViewById(R.id.FreezerInventoryRecyclerView);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mAdapter = new ItemRecyclerViewAdapter(mDataset);
    mRecyclerView.setAdapter(mAdapter);

    AddFreezerItems = findViewById(R.id.addItemsFreezer);

    SharedPreferences prefs = getSharedPreferences("itemInfo1", Context.MODE_PRIVATE);
        String name = prefs.getString("FoodName1", null);
        String date = prefs.getString("ExpirationDate1", null);
        mDataset.add(name);
        mDataset.add(date);
        mAdapter.notifyDataSetChanged();
        SharedPreferences.Editor editor = prefs.edit();
        editor.clear();
        editor.apply();

    SharedPreferences preferences = getSharedPreferences("itemName", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor1 = preferences.edit();
    editor1.clear();
    editor1.apply();

}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u冷冻库);
mDataset=newarraylist();
mRecyclerView=findViewById(R.id.FreezerInventoryRecyclerView);
mRecyclerView.setHasFixedSize(true);
mLayoutManager=新的LinearLayoutManager(此);
mRecyclerView.setLayoutManager(mllayoutmanager);
mAdapter=新项目回收服务适配器(mDataset);
mRecyclerView.setAdapter(mAdapter);
AddFreezerItems=findviewbyd(R.id.addItemsFreezer);
SharedReferences prefs=GetSharedReferences(“itemInfo1”,Context.MODE\u PRIVATE);
String name=prefs.getString(“FoodName1”,null);
字符串日期=prefs.getString(“ExpirationDate1”,null);
mDataset.add(名称);
mDataset.add(日期);
mAdapter.notifyDataSetChanged();
SharedReferences.Editor=prefs.edit();
编辑器.clear();
editor.apply();
SharedReferences首选项=GetSharedReferences(“itemName”,Context.MODE\u PRIVATE);
SharedReferences.Editor editor1=首选项.edit();
editor1.clear();
editor1.apply();
}

问题在于您的数据类型-当前是一个
ArrayList

创建一个POJO来保存行信息,一个项目应该包含填充一行的所有数据

POJO:

要创建项目,请执行以下操作:

mDataset = new ArrayList<Event>(); // change your current instance variable from String to Event type

String name = prefs.getString("FoodName1", null);
String date = prefs.getString("ExpirationDate1", null);

mDataset.add(new Event(name, date));

我回家后再试试谢谢:)你让我很容易做到了谢谢!只是想知道为什么我的“回收器”视图会显示一个像列表中一样的空行,但当我添加项目时,它只是替换了它。
mDataset = new ArrayList<Event>(); // change your current instance variable from String to Event type

String name = prefs.getString("FoodName1", null);
String date = prefs.getString("ExpirationDate1", null);

mDataset.add(new Event(name, date));
public ItemRecyclerViewAdapter(ArrayList<Event> mDataset){
    this.mDataset = mDataset;
} 
@Override
public void onBindViewHolder(ItemRecyclerViewAdapter.ViewHolder holder, int position) {
    holder.mItemName.setText(mDataset.get(position).getName());
    holder.mItemDate.setText(mDataset.get(position).getDate());
}