Как получить доступ к arraylist из arraylist в адаптерах

Привет, я делаю приложение для Android. Я использую синтаксический анализ json в своем приложении. прежде всего это мой ответ JSON

{
  "Data": {
    "headerText": "Revolution",
    "productStartingPrice": "$38.78",

    "sizeList": [
      {
        "textUpper": "Revolution for (Pink)",
        "textLower": "$38.78",
        "packList": [
          {
            "textUpper": "3 DOSES",
            "textLower": "$38.78",

          }
          {
            "textUpper": "6 DOSES",
            "textLower": "$71.60",

          }
        ]
      },
      {
        "textUpper": "Revolution for (Blue)",
        "textLower": "$46.92",
        "packList": [
          {
            "textUpper": "3 DOSES",
            "textLower": "$46.92",
          }
          {
            "textUpper": "6 DOSES",
            "textLower": "$79.56",


          }
          {
            "textUpper": "12 DOSES",
            "textLower": "$137.27",

          }
        ]
      }
    ]

  },
  "Status": 1,
  "Message": "",
  "UserMessage": ""
}

Теперь я использую настраиваемый диалог предупреждений для загрузки массива списков размеров и другого диалогового окна для массива списков пакетов. Теперь я хочу, когда пользователь выбирает (розовый) из списка размеров, а затем во втором ежедневном журнале я хочу отображать 3 дозы и 6 доз из списка пакетов, а когда пользователь выбирает (синий), я хочу отображать 3 дозы, 6 доз, 12 доз. Прямо сейчас я получаю только последние два предмета из (синего) 6 доз, 12 доз. может ли кто-нибудь помочь мне решить эту проблему?

 private void showDialog(){

        dialogf = new Dialog(getActivity());

        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_main, null);

        ListView lv = (ListView) view.findViewById(R.id.custom_list);
        Button close_btn = (Button) view.findViewById(R.id.close_btn_sizelist);
        sizeadapter = new CustomListAdapterSize(getActivity(), sizelists);
        lv.setAdapter(sizeadapter);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            }
        });

        dialogf.setContentView(view);

        dialogf.show();
        close_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialogf.dismiss();
            }
        });


    }

    private void showDialogpacks(){

        dialogfpacks = new Dialog(getActivity());

        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_main_packs, null);
        ListView lv = (ListView) view.findViewById(R.id.custom_list_packs);
        Button close_btn = (Button) view.findViewById(R.id.close_btn_packlist);

        adapterpacks = new CustomListAdaptertwo(getActivity(), sizelists);
        lv.setAdapter(adapterpacks);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            }
        });

        dialogfpacks.setContentView(view);
        dialogfpacks.show();



    }
 public class CustomListAdapterSize extends BaseAdapter {
        private Context context;
        private LayoutInflater inflater;
        private List<ProductLandingSizeListModel> adaptersizelist;
        private CheckBox selected =null;
        private RadioButton mSelectedRB;
        public CustomListAdapterSize(Context context,List<ProductLandingSizeListModel> movieItems) {
            this.context = context;
            this.adaptersizelist=movieItems;
        }

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

        @Override
        public Object getItem(int position) {
            return adaptersizelist.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = LayoutInflater.from(context).inflate(R.layout.listitem_productsizes, null);
                holder.txtproname = (TextView) convertView.findViewById(R.id.txtproductsizenames);
                holder.txtproprice = (TextView) convertView.findViewById(R.id.txtproductsizeprice);
                holder.radioBtn = (CheckBox)convertView.findViewById(R.id.productsize_radio);
                convertView.setTag(holder);
            }else{
                holder = (ViewHolder) convertView.getTag();
            }
            final ProductLandingSizeListModel m = adaptersizelist.get(position);
            holder.txtproname.setText(m.getSizeList_textUpper());
            holder.txtproprice.setText(m.getSizeList_textLower());

            if (position == mSelectedPosition ) {
                if (selected == null) {
                    holder.radioBtn.setChecked(true);
                    selected = holder.radioBtn;
                }
            }
            if (position == mSelectedPosition )
                holder.radioBtn.setChecked(true);
            else
                holder.radioBtn.setChecked(false);

            holder.radioBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    if (selected != null) {
                        selected.setChecked(false);
                    }
                    mSelectedPosition =position;
                    if(mSelectedPositionpack!=0)
                    {
                        mSelectedPositionpack=0;
                    }
                    holder.radioBtn.setChecked(true);
                    selected = holder.radioBtn;

                    notifyDataSetChanged();

                    dialogf.dismiss();
                    showDialogpacks();
                }
            });

            return convertView;
        }
        class ViewHolder{

            TextView txtproname,txtproprice;
            public CheckBox radioBtn;
        }

    }

    public class CustomListAdaptertwo extends BaseAdapter {


        private CheckBox selected =null;
        private Context context;
        private LayoutInflater inflater;
        private List<ProductLandingSizeListModel> adaptersizelist;


        public CustomListAdaptertwo(Context context,List<ProductLandingSizeListModel> adaptersizelist) {
            this.context = context;
            this.adaptersizelist=adaptersizelist;
            inflater = LayoutInflater.from(context);
        }

        @Override
        public int getCount() {
            if (adaptersizelist != null) {
                return adaptersizelist.size();
            }
            return 0;
        }

        @Override
        public Object getItem(int position) {
            return adaptersizelist.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = inflater.inflate(R.layout.custom_spinnertwo, null);
                holder.txtproname = (TextView) convertView.findViewById(R.id.text_main_seentwo);
                holder.txtproprice = (TextView) convertView.findViewById(R.id.sub_text_seentwo);
                holder.checkpack = (CheckBox)convertView.findViewById(R.id.productpack_radio);
                convertView.setTag(holder);
            }else{
                holder = (ViewHolder) convertView.getTag();
            }

            final ProductLandingSizeListModel m = adaptersizelist.get(position);

            for(int i=0;i<adaptersizelist.get(position).getPacklistmodel().size();i++)
            {
                System.out.println("PACK na data"+adaptersizelist.get(position).getPacklistmodel().get(i).getPackList_textUpper());

                holder.txtproname.setText(adaptersizelist.get(position).getPacklistmodel().get(i).getPackList_textUpper());
                holder.txtproprice.setText(adaptersizelist.get(position).getPacklistmodel().get(i).getPackList_textLower());

            }


            if (position == mSelectedPositionpack ) {
                if (selected == null) {
                    holder.checkpack.setChecked(true);
                    selected = holder.checkpack;
                }
            }
            if (position == mSelectedPositionpack )
                holder.checkpack.setChecked(true);
            else
                holder.checkpack.setChecked(false);

            holder.checkpack.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    if (selected != null) {
                        selected.setChecked(false);
                    }
                    mSelectedPositionpack =position;
                    holder.checkpack.setChecked(true);
                    selected = holder.checkpack;
                   // selected_pack_text.setText(movieItems.get(position)+" - "+"$"+packItems.get(position));
                    notifyDataSetChanged();



                    dialogfpacks.dismiss();
                }
            });
            return convertView;
        }
        class ViewHolder{

            TextView txtproname,txtproprice;
            CheckBox checkpack;
        }

    }

person chris    schedule 16.10.2017    source источник
comment
вам нужно иметь arraylist типа packlist в вашем модальном классе sizelist   -  person Vivek Mishra    schedule 16.10.2017
comment
да я уже   -  person chris    schedule 16.10.2017
comment
@VivekMishra вы можете помочь   -  person chris    schedule 16.10.2017
comment
можете ли вы выделить код, в котором вы выбираете из первого списка   -  person Vivek Mishra    schedule 16.10.2017
comment
проверьте мои адаптеры .. пожалуйста   -  person chris    schedule 16.10.2017


Ответы (2)


Измените свои showDialogpacks следующим образом. При щелчке первого диалогового окна передайте позицию, по которой щелкнули, а затем внутри этого передайте только элемент внутри списков размеров для определенной позиции.

  private void showDialogpacks(int position){

    dialogfpacks = new Dialog(getActivity());

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_main_packs, null);
    ListView lv = (ListView) view.findViewById(R.id.custom_list_packs);
    Button close_btn = (Button) view.findViewById(R.id.close_btn_packlist);

    adapterpacks = new CustomListAdaptertwo(getActivity(), sizelists.get(position).getPacklistmodel());
    lv.setAdapter(adapterpacks);

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        }
    });

    dialogfpacks.setContentView(view);
    dialogfpacks.show();



}

Также измените тип списка второго адаптера на ProductLandingPackListModel.

  public CustomListAdaptertwo(Context context,List<ProductLandingPackListModel> adaptersizelist) {
        this.context = context;
        this.adaptersizelist=adaptersizelist;
        inflater = LayoutInflater.from(context);
    }

И внутри метода GetView CustomAdapdtertwo

    final ProductLandingPackListModel model = adaptersizelist.get(position);

    holder.txtproname.setText(model.getPackList_textUpper());
    holder.txtproprice.setText(model.getPackList_textLower());
person Sharath kumar    schedule 16.10.2017
comment
выдает ошибку (getActivity(), sizelists.get(position)); здесь. во втором адаптере нужно менять? - person chris; 16.10.2017
comment
Братан, проблема здесь во втором адаптере. Вам нужно передать один элемент внутреннего массива. передать sizelists.get(position).packList. - person Sharath kumar; 16.10.2017
comment
Я не знаю имя вашего метода. Вам нужно пройти так, а также изменить arrayList внутри второго адаптера. Это должно быть List‹YOURPACKETLISTMODEL› adaptersizelist - person Sharath kumar; 16.10.2017
comment
также покажите свою модель данных. Проверьте это обновление. Вам нужно передать getPacklistmodel(). Также вам нужно изменить тип списка во втором адаптере на тип getPacklistmodel() - person Sharath kumar; 16.10.2017
comment
братан, я меняю этот метод в соответствии с ответом, он все еще дает красную линию - person chris; 16.10.2017
comment
где увидеть ошибку? Я думаю, что это она .. это должно решить вашу проблему. - person Sharath kumar; 16.10.2017
comment
да, его нет .. теперь вы можете сказать мне, нужна ли мне эта петля во втором адаптере или нет? и скажите, пожалуйста, как вызвать этот метод showDialogpacks(); - person chris; 16.10.2017
comment
и подскажите пожалуйста как вызвать этот метод showDialogpacks(что здесь должно быть); - person chris; 16.10.2017
comment
передать нажатую позицию из первого списка - person Sharath kumar; 16.10.2017
comment
у меня проблема при первом нажатии. его представление также @Override public void onClick(View v) { switch (v.getId()) { case R.id.product_view_sizes: showDialog(); ломать; case R.id.product_view_packs: showDialogpacks(); ломать; по умолчанию: перерыв; } } - person chris; 16.10.2017
comment
какая проблема? теперь проблема решена? передать позицию, как это showDialogpacks (позиция); - person Sharath kumar; 16.10.2017
comment
Вы также вызвали метод внутри onItemClick... с позицией. Он будет работать. - person Sharath kumar; 16.10.2017

Привет, Крис, на основе набора пакетов для выбора размера ... обновите список пакетов для каждого размера, который выбирает пользователь

person Shanmugam    schedule 16.10.2017
comment
ваш второй адаптер должен быть типа ArrayList‹Packs› и в списке размеров при нажатии, как показано ниже showDialogPacks(ArrayList‹Packs› packList) , установите для него значение recyclerview - person Shanmugam; 16.10.2017
comment
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView‹?› родитель, View view, int position, long id) { ArrayList‹Packs› packList = sizeList.get(position).getPackList(); //теперь покажем диалог со списком выше } }); - person Shanmugam; 16.10.2017
comment
флажки, которые вы можете обрабатывать в адаптере, при выборе сохраняйте эту позицию - person Shanmugam; 16.10.2017