Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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_Android Arrayadapter_Android Spinner - Fatal编程技术网

Android 在recyclerview中更新微调器

Android 在recyclerview中更新微调器,android,android-recyclerview,android-arrayadapter,android-spinner,Android,Android Recyclerview,Android Arrayadapter,Android Spinner,在包含微调器的recylerview中,如何在微调器中动态添加更多项(仅在该特定位置)。。。现在,当我更新子微调器时,recylerview的所有微调器都会更新。请帮助我仅更新该特定位置(recylerview)的微调器 以下是我的适配器(在recylerview中为这些微调器充气): 以下是自定义生成水: public class CustomSpinnerAdapter extends ArrayAdapter<CommonListViewItems> { CommonL

在包含微调器的recylerview中,如何在微调器中动态添加更多项(仅在该特定位置)。。。现在,当我更新子微调器时,recylerview的所有微调器都会更新。请帮助我仅更新该特定位置(recylerview)的微调器

以下是我的适配器(在recylerview中为这些微调器充气):

以下是自定义生成水:

public class CustomSpinnerAdapter extends ArrayAdapter<CommonListViewItems> {
    CommonListViewItems servicesItem;
    Context context;
    int layoutId;
    private ArrayList<CommonListViewItems> itemsArrayList;

    public CustomSpinnerAdapter(Context context, int layoutId, ArrayList<CommonListViewItems> itemsArrayList)
    {
        super(context,layoutId,itemsArrayList);
        this.context = context;
        this.layoutId=layoutId;
        this.itemsArrayList=itemsArrayList;
    }

    @Override
    public int getCount() {
        return itemsArrayList.size();
    }

    @Override
    public CommonListViewItems getItem(int position) {
        return itemsArrayList.get(position);
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position,convertView,parent);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        return getCustomView(position,convertView,parent);
    }

    private View getCustomView(int position, View convertView, ViewGroup parent)
    {
        final ViewHolder holder;

        if (convertView==null)
        {
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView=inflater.inflate(layoutId,parent,false);
            holder=new ViewHolder();
            servicesItem = new CommonListViewItems();
            holder.textView=(TextView)convertView.findViewById(R.id.tv_listItems);
            convertView.setTag(holder);
        }
        else
        {
            holder=(ViewHolder)convertView.getTag();
        }
        final CommonListViewItems servicesItem =(CommonListViewItems)itemsArrayList.get(position);
        holder.textView.setText(servicesItem.getlistItem());
        return convertView;
    }

    private class ViewHolder
    {
        public TextView textView;
    }

}
recyclerview如下所示:

public void onBindViewHolder(MyViewHolder holder, int position) {
holder.spinner.setAdapter(new CustomSpinnerAdapter(context,R.layout.common_listview_item,list[position]));
list[position].add(item);

单击微调器时,我想从TimePickerDialog添加更多项目(时间),但添加的项目将添加到每个微调器,我只想添加到触摸的特定微调器:


提前感谢…

您需要具有不同数据集的同一spinnerAdapter的多个实例


您已经使用arraylist对checkday textview执行了相同的操作。在这种情况下,在onBindViewHolder中,日期的值取决于列表中的位置。试着做同样的事情。

从您发布的代码中不清楚每个行项目是什么,因此我将规划如何实现这一点:

1) 为任意行项目创建一个单独的布局,其中应包含复选框、保存日期的文本视图以及要填充时间的微调器

2) 创建一个同时表示所有这些内容的对象,如“DayAndTimeSelection”或类似内容。每个对象都有自己的微调器实例和自己的微调器适配器实例,因为您需要在该行的微调器和该微调器中的一组可能时间之间建立关联

在继续之前,请验证一行项目是否按预期工作

3) 创建一个外部“DayAndTimeItemListAdapter”,用于处理单个行的整个集合。在您的示例中,此列表中只有7项,但如果您更改为每月视图,则可能会得到30项。如果您对每一行都正确地进行了抽象,那么更改每一行项目中的值、向微调器添加时间以及获取/设置复选框将变得清晰。外部适配器是循环使用视图的适配器,因此请确保列表的getView()和getItem()按预期工作,并且每行都有一个单独且唯一的Spinner和SpinnerAdapter实例(查看该行的Spinner和SpinnerAdapter中“@”符号后的id…如:”SpinnerAdapter@1234")


4) 利润

是的,具有不同数据集的每个适配器的不同实例可以更新recyclerview中选定位置的特定微调器适配器

我这样解决了我的问题:

public void onBindViewHolder(MyViewHolder holder, int position) {
holder.spinner.setAdapter(new CustomSpinnerAdapter(context,R.layout.common_listview_item,list[position]));
list[position].add(item);
  • 创建ArrayList的ArrayList,如:

    ArrayList<String> [] list = new ArrayList[predefined_size];
    for (int i=0;i<7;i++)
    {
        list[i]=new ArrayList<String>();
        list[i].addAll(parentList); //parentList is an ArrayList of custom items;
    }
    
  • 然后我们可以将项目添加到特定微调器的列表或适配器中,如下所示:

    public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.spinner.setAdapter(new CustomSpinnerAdapter(context,R.layout.common_listview_item,list[position]));
    
    list[position].add(item);
    
  • 通过这种方式,只有
    微调器
    将被更新,我们希望更新//即给定位置的微调器


    因此,可以在RecyclerView中的给定位置更新微调器。

    我尝试过,我真的尝试过。但是你的代码很难理解,难怪你找不到错误。但是我相信这是因为您的所有视图共享同一个微调器适配器,因此数据相同。请立即尝试,我已删除不必要的代码。请现在试试。。。我真的需要它..每个ViewHolder有一个微调器适配器实例和一个微调器数据。这样他们就相互独立了不,我不会为你重新编写你的应用程序。我试着帮你指明正确的方向。就我而言,就像学校里的陈词滥调说的那样,你得自己试试。这里的人会帮助你,而不是替你做事。下面是一个详细描述holder逻辑的教程。正如我之前所说的,如果所有持有者都查看其微调器的相同数据,当您更改其中一个的数据时,所有持有者都会受到影响。因此,作为一种基本方法,它们都必须共享不同的数据副本。您的意思是说不同行的不同布局?不是膨胀相同的布局,而是链接不同的布局?如何将同一微调器链接到适配器的不同实例?如何将微调器中的适配器设置为适配器的不同实例?请告诉..在onbinderview()中放入此holder.spinnerLeavingTime.setAdapter(新的CustomSpinnerAdapter(dataset.get(position));其中dataset是一个数组列表或一周中每天的映射为什么需要传递dataset.get(position)而不是数据集?您希望每个listview项都有一个时间数组,对吗?每个微调器都有多个时间值,对于列表中的每一行可能不同。因此,您需要为每一行提供一个arraylist或数组。您需要将所有这些都保存在一个新的数组或arraylist中,我将其命名为dataset。非常感谢masp,u为我节省了很多时间。它像很抱歉这么晚才回复,事实上我刚试过。。