2017-03-02 10 views
1

リストビューでチェックされたアイテムを削除した後、以下のアイテムがチェックされていない場合、BaseAdapterは自動的に次のアイテムをチェックします。このアイテムがOrderItemクラスの "isDone = false"に設定されていてもevereyをクリックした後、私のダイアログに答える - 。。私は)「真に「isDone」に設定アンドロイド - チェックボックスアイテムの削除後にBaseAdapter内のアイテムをチェックします

他のすべての場合(両方がチェック以下の項目をチェックしたり、両方のチェックを外すように)除去しながら正常に動作します

私が試しました多く残念ながら、私はこのための解決策を見つけるカントアンドロイドおよびJavaに新しいイムを

たぶんuの人は私を助けることができます:)(私の英語のため申し訳ありません - ドイツからのイム)

例:。。。

ITEM 1(チェック)--->削除

ITEM 2(チェックされていない)

がにつながる:ここ

ITEM 2(チェック)

はgetViewメソッドは、私のBaseAdapterからです。

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

私の削除方法は、「TwoFragment」と呼ばれる私のListFragmentである - ここを参照してください:あなたは私を助けることができれば

@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

更新:Personnaly、問題はif(currentView == 0){....} else {viewHolder =(ListViewItemWidgetWrapper)currentView.getTag();のelseメソッドにあると思います。 } Itemが削除されたときにelse節が呼び出されるため... – 1zz0

答えて

0

更新日:

こんにちは、私は自分で修正しました!

毎回私は、既存の項目の他のメソッドが呼び出された、アイテムを削除する - 下記参照:

else { 


     viewHolder = (ListViewItemWidgetWrapper) currentView.getTag(); 


    } 

を問題は、私は、リストビューの再建に私のチェックボックスをチェックするとこと、だった - 私のOnCheckedChangeListenerましたと呼ばれる!

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

そしてので私のリスナーの私のアニメーションのためのスレッドRunnalbeのリスナーに、他の方法(チェックを外します)を呼び出し中に、アプリケーションがクラッシュしました。

私のチェックボックスを再構築する前にOnCheckedChangeListenerを無効にして修正しました。

viewHolder.getCheckBox().setOnCheckedChangeListener(null); 

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

この手順の後にリスナーを再起動するのを忘れないでください!

希望すると助かります!

関連する問題