2016-04-14 14 views
0

In meiner app habe ich listview mit checkbox und edittext (quantity) schließlich senden taste in fragment1. Ich wähle ein Kontrollkästchen aus und gebe den Wert in edittext ein und klicke auf "Senden" und gehe zu fragment2.Wie onresume in Listview checkbox und edittext value

Mein Problem ist .. Wenn ich wieder zurück zu fragment1 bedeute, möchte ich das Kontrollkästchen aktivieren, welches ich ausgewählt habe und den Mengenwert auch in editext einstellen .. Wie geht das?

Bitte jemand mir helfen ..

Mein Code:

Fragment:

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

} 

Vielen Dank im Voraus!

+0

können Sie mir den Zweck der Instanzvariable "selFlag" in der LunchFragment.MenuItem-Klasse mitteilen? –

+0

selFlag ist aktiviert für checkbox checked or not – hikoo

+0

Wenn Sie es benutzen, würde Ihr Problem gelöst werden –

Antwort

0

entfernen Sie alle holder.VIEW.set.. Werte von onClick() Methoden. Und aktualisieren Sie die Werte in Ihrem list und fügen Sie diese Zeile unter - notifyItemChanged(position);

Verwenden Sie auch setTag(position); für jede Ihrer Ansichten. Und rufen Sie sie in Ihrer onClick() Methode ab.

prüfen Stück Code Ich verwende -

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

Vielleicht habe ich nicht das ganze Problem bekam, aber hier ist das, was ich schlage vor, Sie:

1. Wenn Sie mit allen Daten für die Liste erhalten Änderungen - bei der Rückkehr zu fragment, rufen Sie einfach adapter.notifyDataSetChanged(). Dies zeigt aktualisierte Daten an.

2. Wenn Sie Ihre LunchFragment.MenuItem Klasse in database speichern - auf einige Änderungen setzen Sie neue Werte hinein. Nach der Rückkehr zur ersten fragment - lesen Sie diese Werte erneut von database und erstellen Sie neue adapter (oder ersetzen Sie Datenquelle in bestehenden und rufen Sie adapter.notifyDataSetChanged()).

Hoffe, das hilft.