2016-04-14 14 views
0

私のアプリでは、私はcheckboxとedittext(数量)でlistviewを持っています最終的にfragment1のボタンを送信します。私はいくつかのチェックボックスを選択し、edittextに値を入力し、submitボタンをクリックしてfragment2に移動します。どのようにリストビューのチェックボックスと編集テキスト値でonresume

私がもう一度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(); 
    } 

} 

CustomAdapter:事前に

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; 
    } 

} 

ありがとう!

+0

LunchFragment.MenuItemクラスのインスタンス変数 "selFlag"の目的を教えてください。 –

+0

selFlagがチェックされているかどうかチェックされているかどうかチェックしてください。 – hikoo

+0

問題を解決するには –

答えて

0

すべてholder.VIEW.set..の値をonClick()から削除します。 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); 
0



1.あなたはすべてをリストするためにデータを保存した場合を変更 - fragmentに戻るときは、adapter.notifyDataSetChanged()に電話するだけです。更新されたデータが表示されます。

2. LunchFragment.MenuItemクラスをdatabaseに保存した場合、変更によっては新しい値が入力されます。 fragmentに戻った後、databaseからこれらの値をもう一度読んで、新しいadapterを作成します(または既存のデータソースを置き換えてadapter.notifyDataSetChanged()と呼んでください)。

これが役に立ちます。

関連する問題