如何打开列表视图中的恢复复选框并编辑文本值



在我的应用程序中,我在fragment1中有带复选框和edittext(quantity)finally submit按钮的listview。我选中一些复选框,在edittext中输入值,然后单击提交按钮并将其移动到fragment2。

我的问题是..如果我再次回到fragment1意味着,我想选中我选择的复选框,并在editext中设置数量值。。如何操作。

请任何人帮我…

我的代码:

片段:

public class LunchFragment extends Fragment {
    public static class MenuItem implements Parcelable {
        String ItemName;
        String Amount;
        String Quantity;
        Boolean selFlag;
        public MenuItem(String name, String amt, String qty) {
            this.ItemName = name;
            this.Amount = amt;
            this.Quantity = qty;
            this.selFlag = false;
        }
            public MenuItem(Parcel parcel) {
            this.ItemName = parcel.readString();
            this.Amount = parcel.readString();
            this.Quantity = parcel.readString();
        }
        @Override
        public int describeContents() {
            return 0;
        }
        @Override
        public void writeToParcel(Parcel out, int flags) {
            Log.d("Check what is in Parcel", out.toString() + out.readString());
            out.writeString(ItemName);
            out.writeString(Amount);
            out.writeString(Quantity);
        }

        public static Creator<MenuItem> CREATOR = new Creator<MenuItem>() {
            public MenuItem createFromParcel(Parcel in) {
                return new MenuItem(in);
            }
            public MenuItem[] newArray(int size) {
                return new MenuItem[size];
            }
        };
    }
    private DBHelper mydb ;
    private  String quantitys = "1";
    ListView menuList;
    ArrayList<MenuItem> itemList = new ArrayList<MenuItem>();
    ArrayList<MenuItem> selList = new ArrayList<MenuItem>();
    MenuListCustomAdapter adapter;
    Button order;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.menu_list_fragment, container, false);
        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        mydb = new DBHelper(this.getActivity());
        menuList = (ListView)view.findViewById(R.id.menuItem_list);
        order = (Button)view.findViewById(R.id.order_button);
        ArrayList<String> item_list = new ArrayList<String>();
        ArrayList<String> price_list = new ArrayList<String>();
        item_list = mydb.getAllMenuItemName();
        price_list = mydb.getAllMenuItemPrice();
        for(int i=0; i<item_list.size();i++){
            itemList.add(new MenuItem(item_list.get(i), price_list.get(i), quantitys));
        }
        adapter = new MenuListCustomAdapter(itemList, this.getActivity());
        menuList.setAdapter(adapter);

        order.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selList.clear();
                Log.d("MenuListCount", String.valueOf(menuList.getCount()) +"--"+ adapter.getCount());
                for(int i=0; i<menuList.getCount();i++) {
                    MenuItem item = (MenuItem) adapter.getItem(i);
                    Log.d("MenuChild", i + " - " + itemList.size() + "," + item.ItemName + "," + item.selFlag + "," + item.Quantity);
                    if(item.selFlag) {
                        selList.add(new MenuItem(item.ItemName, String.valueOf(Integer.parseInt(item.Quantity) * Integer.parseInt(item.Amount)), item.Quantity));
                        //item.selFlag = false;
                    }
                }
                if(selList.size() > 0) {
                    Intent accIntent = new Intent(getActivity(), OrderActivity.class);
                    accIntent.putExtra("item", "Order");
                    accIntent.putExtra("itemList", selList);
                    startActivity(accIntent);
                } else {
                    Toast.makeText(getActivity().getApplicationContext(), "Please pick atleast from menu", Toast.LENGTH_SHORT).show();
                }
            }
        });
        return view;
    }
    public void onResume() {
        super.onResume();
        itemList.clear();
        ArrayList<String> item_list = new ArrayList<String>();
        ArrayList<String> price_list = new ArrayList<String>();
        item_list = mydb.getAllMenuItemName();
        price_list = mydb.getAllMenuItemPrice();
        for(int i=0; i<item_list.size();i++){
            itemList.add(new MenuItem(item_list.get(i), price_list.get(i), quantitys));
        }
        adapter = new MenuListCustomAdapter(itemList, this.getActivity());
        menuList.setAdapter(adapter);
        adapter.notifyDataSetChanged();
  }
}

自定义适配器:

public class MenuListCustomAdapter extends BaseAdapter implements ListAdapter {
    private ArrayList<LunchFragment.MenuItem> list = new ArrayList<LunchFragment.MenuItem>();
    private Context context;
    private DBHelper mydb ;
    public MenuListCustomAdapter(ArrayList<LunchFragment.MenuItem> list, Context context) {
        this.list = list;
        this.context = context;
        mydb = new DBHelper(context);
    }
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public Object getItem(int position) {
        return list.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        final ViewHolder holder;
        Log.d("position", String.valueOf(position));
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) ((Activity)context).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.menu_custom_fragment,null);
            holder = new ViewHolder();
            holder.listItemText = (TextView)view.findViewById(R.id.menu_list_item_string);
            holder.listAmtText = (TextView)view.findViewById(R.id.menu_amt_list_item);
            holder.qty = (EditText)view.findViewById(R.id.quantity);
            holder.checkBox = (CheckBox)view.findViewById(R.id.chckbox);
            holder.plus = (ImageView)view.findViewById(R.id.add);
            holder.minus = (ImageView)view.findViewById(R.id.minus);
            holder.info = (ImageView)view.findViewById(R.id.information);
            view.setTag(holder);
        }else{
            holder=(ViewHolder)view.getTag();
        }

        holder.qty.setFilters(new InputFilter[]{
                new InputFilter() {
                    @Override
                    public CharSequence filter(CharSequence cs, int start,
                                               int end, Spanned spanned, int dStart, int dEnd) {
                        // TODO Auto-generated method stub
                        if (cs.equals("")) { // for backspace
                            return cs;
                        }
                        if (cs.toString().matches("[0-9]+")) {
                            return cs;
                        }
                        return "";
                    }
                }
        });
        holder.listItemText.setText(list.get(position).ItemName);
        holder.listAmtText.setText(list.get(position).Amount);
        holder.qty.setText(list.get(position).Quantity);
        holder.checkBox.setChecked(list.get(position).selFlag);
        Log.d("QTY Id ", holder.qty.toString() + '@' + String.valueOf(position)+"--"+list.get(position).ItemName);
        holder.info.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String itemName = list.get(position).ItemName;
                Log.d("Selected Item",itemName);
                ArrayList<String> temp_item_list = new ArrayList<String>();
                temp_item_list = mydb.getComboItem(itemName);
                List<String> temp = new ArrayList<String>();
                Log.d("ComboListSize", String.valueOf(temp_item_list.size()));
                for(int i=0; i<temp_item_list.size();i++){
                    String[] a= temp_item_list.get(i).split("\$");
                    for(int x=0;x<a.length;x++){
                        temp.add(a[x]);
                    }
                }
                //Create sequence of items
                final CharSequence[] chars = temp.toArray(new String[temp.size()]);
                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
                dialogBuilder.setTitle(list.get(position).ItemName + " Inside");
                dialogBuilder.setItems(chars, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {
                        String selectedText = chars[item].toString();  
                    }
                });
                //Create alert dialog object via builder
                AlertDialog alertDialogObject = dialogBuilder.create();
                //Show the dialog
                alertDialogObject.show();
            }
        });
        holder.checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("Check Box Click", String.valueOf(position));
                if(holder.checkBox.isChecked()){
                    list.get(position).selFlag = true;
                } else {
                    holder.qty.setText("1");
                    list.get(position).selFlag = false;
                }
            }
        });
            holder.plus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(list.size()>0){
                            list.get(position).selFlag = true;
                            holder.checkBox.setChecked(list.get(position).selFlag);
                            String value = list.get(position).Quantity.toString();
                            Log.d("plus Position on Click", String.valueOf(position));
                            int count = Integer.parseInt(value)+1;
                            list.get(position).Quantity = String.valueOf(count);
                            holder.qty.setText(String.valueOf(count));
                            Log.d("plus value", String.valueOf(count));
                    }
                }
            });
            holder.minus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String value = list.get(position).Quantity.toString();
                    if(Integer.parseInt(value)>1){
                        Log.d("minus Position on Click", String.valueOf(position));
                        int count = Integer.parseInt(value)-1;
                        list.get(position).Quantity = String.valueOf(count);
                        holder.qty.setText(String.valueOf(count));
                        Log.d("subtarct value", String.valueOf(count));
                 }
                }
            });
        return view;
    }
    public static class ViewHolder{
        public TextView listItemText;
        public TextView listAmtText;
        public EditText qty;
        public CheckBox checkBox;
        public ImageView plus;
        public ImageView minus;
        public ImageView info;
    }
}

提前感谢!

onClick()方法中删除所有holder.VIEW.set..值。并更新list中的值,并在notifyItemChanged(position); 下方添加此行

另外,对每个视图使用setTag(position);。并在onClick()方法中检索它们。

检查我正在使用的代码-

holder.chkFavorite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = (int) v.getTag();
                if (objects.get(position).getProduct().isProductWishlistStatus())
                    objects.get(position).getProduct().setProductWishlistStatus(true);
                else
                    objects.get(position).getProduct().setProductWishlistStatus(false);
                notifyItemChanged(position);
            }
        });
holder.chkFavorite.setChecked(objects.get(position).getProduct().isProductWishlistStatus());
holder.chkFavorite.setText(String.valueOf(objects.get(position).getProduct().getProductWishlistCount()));
holder.chkFavorite.setTag(position);

也许我没有解决所有问题,但我建议您:

1.如果保留所有更改的列表的数据,则返回到fragment时,只需调用adapter.notifyDataSetChanged()。这将显示更新的数据

2.如果您将LunchFragment.MenuItem类存储在database中,则在某些更改时将新值放入其中。返回到第一个fragment后,从database再次读取这些值并创建新的adapter(或将数据源替换为现有数据源并调用adapter.notifyDataSetChanged())。

希望这能有所帮助。

最新更新