2017-03-02 57 views
1

删除我的ListView中的选中条目并且如果下面的条目未被选中 - 我的BaseAdapter会自动检查下一条目。即使此项目在我的OrderItem类别中设置为“isDone = false”。 everey单击并回答我的对话框后 - 我设置“isDone”为“true)安卓 - 复选框在删除条目后自动检查BaseAdapter中的条目

任何其他情况下(如托运或以下的项目检查或两者选中),同时消除工作正常

我尝试了。很多可惜我不能找到该即时通讯新的Android和Java的解决方案

也许能跟大家能帮助我:)(抱歉,我的英语 - IM来自德国)

例如:。

ITEM 1(已勾选)--->删除

项目2(未选中)

导致:

项目2(检查)

这里是我的BaseAdapter的getView。

@Override 
public View getView(final int index, View currentView, final ViewGroup parent) { 


    //ViewHolder 
    final ListViewItemWidgetWrapper viewHolder; 


    final OrderItem orderItem = (OrderItem) getItem(index); 


    if (currentView == null) { 


    currentView = layoutInflater.inflate(R.layout.fragment_two, parent, false); 

     viewHolder = new ListViewItemWidgetWrapper(); 

     // Instanz des ListViewItemWidgetWrapper 


     //TextView fuer den Shop 
     viewHolder.setTxtListShop((TextView) currentView.findViewById(R.id.txtListShop)); 

     //TextView fuer die Produktbeschreibung 
     viewHolder.setTxtListProduct((TextView) currentView.findViewById(R.id.txtListProduct)); 

     //TextView fuer den Preis 
     viewHolder.setTxtListValue((TextView) currentView.findViewById(R.id.txtListValue)); 

     //TextView fuer den Bezahldienstleister 
     viewHolder.setTxtListPayment((TextView) currentView.findViewById(R.id.txtListPayment)); 

     //TextView fuer den Eingangsdatum 
     viewHolder.setTxtListOrderDate((TextView) currentView.findViewById(R.id.txtListOrderDate)); 

     //TextView fuer dem TagesStatus of Return 
     viewHolder.setTxtStatusOfReturn((TextView) currentView.findViewById(R.id.txtStatusOfReturn)); 

     viewHolder.setCheckBox((CheckBox) currentView.findViewById(R.id.list_checkbox)); 

     viewHolder.setImageOrder((ImageView) currentView.findViewById(R.id.image_order)); 


     if (FileHandler.getInstance().getAllOrders().get(index).getPictureForOrderString() == 0) { 

      viewHolder.getImageOrder().setBackgroundResource(R.drawable.retoure_96); 


     } 

     if (FileHandler.getInstance().getAllOrders().get(index).getPictureForOrderString() == 1) { 

      viewHolder.getImageOrder().setBackgroundResource(R.drawable.bank); 


     } 

     if (FileHandler.getInstance().getAllOrders().get(index).getPictureForOrderString() == 2) { 

      viewHolder.getImageOrder().setBackgroundResource(R.drawable.neues_produkt_96); 

     } 


     viewHolder.getCheckBox().setChecked(orderItem.isDone()); 



     currentView.setTag(viewHolder); 


    } else { 


     viewHolder = (ListViewItemWidgetWrapper) currentView.getTag(); 


    } 


    // Befuellen der einzelnen Widgets 
    viewHolder.getTxtListShop().setText(orderItem.getShopName()); 

    viewHolder.getTxtListProduct().setText(orderItem.getProductDescription()); 

    viewHolder.getTxtListValue().setText(orderItem.getValue() + " EUR"); 

    viewHolder.getTxtListPayment().setText(orderItem.getPaymentName()); 

    viewHolder.getTxtListOrderDate().setText("vom " + orderItem.getDateOfOrder()); 

    viewHolder.getTxtStatusOfReturn().setText(orderItem.getStatusOfReturn()); 

    /*viewHolder.getCheckBox().setChecked(orderItem.isDone());    MY APP CRASHES AFTER DELETE ITEM IF I ACTIVATE THIS PEACE OF CODE */ 





    switch (FileHandler.getInstance().getAllOrders().get(index).getPictureForOrderString()) { 

     case 0: 

      viewHolder.getImageOrder().setBackgroundResource(R.drawable.retoure_96); 

      break; 

     case 1: 

      viewHolder.getImageOrder().setBackgroundResource(R.drawable.bank); 

      break; 

     case 2: 

      viewHolder.getImageOrder().setBackgroundResource(R.drawable.neues_produkt_96); 

      break; 

    } 




    final CheckBox checkBox = viewHolder.getCheckBox(); 


    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 




      if (isChecked && orderItem.isDone() == false) { 



       promptForResultDialog(new PromptRunnable() { 
        // Runnable Thread reagiert NACH der Benutzereingabe 
        public void run() { 
         // Hole den Wert vom Dialog 

         int value = this.getValue(); 

         System.out.println("VALLLUUEEEEEEEEEEEEEEEEEEEEE____" + value); 



         // Den Wert zur Abfrage der Eingabe des Nutzers in einem Switch-Case prüfen 
         switch (value) { 

          case 0: 
           viewHolder.getImageOrder().setBackgroundResource(R.drawable.retoure_96); 
           orderItem.setPictureForOrderString(0); 
           orderItem.setIsDone(true); 

           orderItem.setStatusOfReturn("Retourniert"); 
           viewHolder.getTxtStatusOfReturn().setText(orderItem.getStatusOfReturn()); 

           Toast.makeText(context, "Als Retoure markiert!", Toast.LENGTH_SHORT).show(); 

           refreshListFragment(); 

           new FlipHorizontalAnimation(viewHolder.getImageOrder()).animate(); 

           new SlideInUnderneathAnimation(viewHolder.getTxtStatusOfReturn()).animate(); 

           viewHolder.getTxtStatusOfReturn().setTextColor(Color.parseColor("#ff4081")); 

           break; 

          case 1: 
           viewHolder.getImageOrder().setBackgroundResource(R.drawable.bank); 
           orderItem.setPictureForOrderString(1); 
           orderItem.setIsDone(true); 
           Toast.makeText(context, "Als bezahlt markiert!", Toast.LENGTH_SHORT).show(); 

           orderItem.setStatusOfReturn("Bezahlt"); 
           viewHolder.getTxtStatusOfReturn().setText(orderItem.getStatusOfReturn()); 

           refreshListFragment(); 



           viewHolder.getTxtStatusOfReturn().setTextColor(Color.parseColor("#ff4081")); 

           new FlipHorizontalAnimation(viewHolder.getImageOrder()).animate(); 
           new SlideInUnderneathAnimation(viewHolder.getTxtStatusOfReturn()).animate(); 

           break; 

         } 
        } 
       }); 
      } else if (isChecked == false) { 



       if(checkBox.isChecked()){ 
        checkBox.toggle(); 
       } 


       viewHolder.getImageOrder().setBackgroundResource(R.drawable.neues_produkt_96); 

       orderItem.setPictureForOrderString(2); 

       orderItem.setIsDone(false); 



       orderItem.setStatusOfReturn(orderItem.getDayDifference() + " Tage bis zum " + orderItem.getEndDate()); 

       updateDates(); 

       viewHolder.getTxtStatusOfReturn().setText(orderItem.getStatusOfReturn()); 



        new FlipHorizontalAnimation(viewHolder.getImageOrder()).animate(); 
        new SlideInUnderneathAnimation(viewHolder.getTxtStatusOfReturn()).animate(); 




       refreshListFragment(); 

      } 


     } 

    }); 


    //rueckgabe der generierten View 
    return currentView; 
} 

我的删除方法是在我ListFragment称为“TwoFragment” - 在这里看到:

@Override 
public boolean onContextItemSelected(MenuItem item){ 

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 

    int index = info.position; 



    switch (item.getItemId()){ 

     case R.id.delete: 


      FileHandler.getInstance().getAllOrders().remove(index); 

      refreshListFragment(); // FOR THREEFRAGMENT 

      listViewActivityAdapter.notifyDataSetChanged(); 

      Toast.makeText(getActivity(),"Bestellung wurde gelöscht!", Toast.LENGTH_SHORT).show(); 

      return true; 
    } 



    return super.onContextItemSelected(item); 

} 

我将非常高兴,如果你能帮助我:)谢谢你在前进!

+0

UPDATE:Personnaly,我认为这个问题是在从其他的方法,如果(currentView == 0){....}否则{viewHolder =(ListViewItemWidgetWrapper)currentView.getTag(); }因为else子句被调用,当一个Item被移除时... – 1zz0

回答

0

更新:

你好家伙,几小时后我自己修好了!

每次我删除了某个项目,对现有项目的其他方法被调用 - 见下:

else { 


     viewHolder = (ListViewItemWidgetWrapper) currentView.getTag(); 


    } 

的问题是,当我检查我的复选框上的ListView的重建 - 我OnCheckedChangeListener是叫!

viewHolder.getCheckBox().setChecked(orderItem.isDone()); 

因为线程Runnalbe我在我的听众动画的同时,在App同时呼吁在听者的其他方法(取消)坠毁。

我通过我的复选框重建前右禁用OnCheckedChangeListener固定它。

viewHolder.getCheckBox().setOnCheckedChangeListener(null); 

    viewHolder.getCheckBox().setChecked(orderItem.isDone()); 

不要忘记在此过程后重新激活监听器!

希望它会帮助!