0

Ich versuche zu notifydatasetchanged, wenn ich fertig bin, einen Bearbeitungstext in einer Recyclerview zu bearbeiten (warum? Weil einige andere Objekte in Recyclerview nur zugänglich sind, wenn zum Beispiel die Text bearbeiten ist gleich "test").Android - notifyDataSetChanged, wenn ich einen editText bearbeitet habe

So habe ich einen Adapter mit vielen Ansicht Halter, hier ist der für Text bearbeiten:

public EditTextViewHolder(View itemView, final Activity activity, final Context context, final String param) { 
    super(itemView); 

    this.activity = activity; 
    this.context = context; 
    this.param  = param; 


    name  = (TextView) itemView.findViewById(R.id.tEditTextName); 
    desc  = (TextView) itemView.findViewById(R.id.tEditTextDescription); 
    details  = (TextView) itemView.findViewById(R.id.tEditTextMoreDetails); 
    editText = (EditText) itemView.findViewById(R.id.eEditTextValue); 
    image  = (ImageView) itemView.findViewById(R.id.iEditTextImage); 
    lMain  = (LinearLayout) itemView.findViewById(R.id.layoutTaskEditText); 
    lOptional = (LinearLayout) itemView.findViewById(R.id.layoutEditTextOptional); 
    lRequired = (LinearLayout) itemView.findViewById(R.id.isRequiredTask); 

} 

public void setLayout(final Content content) { 
    name.setText(content.getTitle()); 

editText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      content.getAnswers().get(0).setValue(s.toString().trim()); 
     } 
    }); 

    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (!hasFocus) 
       TaskActivity.sAdapter.notifyDataSetChanged(); 
     } 
    }); 
} 

Aber ich bin immer die Fehlermeldung „Kann diese Methode nicht aufrufen, während RecyclerView ein Layout oder Scrollen wird die Berechnung“ auch wenn ich versuche, im handler oder im ui thread zu melden, funktioniert es nicht.

Es funktioniert mit allen meinen anderen Sichthalter. Weißt du, was mache ich falsch mit Text bearbeiten?

Antwort

0

versuchen, notifyDataSetChanged auf dem Adapter anstelle der Aktivität aufzurufen und auch innerhalb von UIThread aufzurufen.

activity.runOnUiThread(new Runnable() { 

             @Override 
             public void run() { 

             } 
            }); 

und vergewissern Sie sich in Ihrem Adapter hat diese Methode mit der rechten Anzahl von Daten

@Override 
    public int getItemCount() { 
    } 
+0

Hey, ich diese Lösung noch einmal versucht haben, um sicher zu sein, aber es ist auf jeden Fall nicht funktioniert, ich habe immer noch „diese Methode nicht während RecyclerView anrufen können berechnet ein Layout oder scrollt ". Ich habe viele Ansichtshalter in verschiedenen Dateien, deshalb bekomme ich meinen Adapter durch die Aktivität, wo der Adapter statisch ist. –

+0

Kannst du mehr von deinem Code posten? Wo rufst du auch Methode setLayout? –

+0

setLayout (der Name möglicherweise nicht angemessen) wird von Onbind-Funktion des Adapters aufgerufen. Ich benutze auch getItemType –

0

Diese Ausnahme wahrscheinlich auftreten, wenn Sie notifyItemInserted anrufen (Position) ;, notifyItemChanged (Position), oder notifyItemRemoved (Position); von einem Hintergrundthread (oder von einem Callback, der auf einem Hintergrundthread ausgeführt wird).

Um dies zu lösen, verwenden Handler in UI Thread:

android.os.Handler mHandler = getActivity().getWindow().getDecorView().getHandler(); 
mHandler.post(new Runnable() { 
    public void run(){ 
      //change adapter contents 
      mRecyclerViewAdapter.notifyItemInserted(position); 
    } 
}); 
+0

Hey, ich habe diese Lösung noch einmal ausprobiert, um sicher zu sein, stürzt die App nicht ab, aber wenn die Edittext Fokus verlieren, verschwindet der Text einfach. Ich habe den Inhalt meines Objekts überprüft, wenn ich in den Bearbeitungstext schreibe, und es ist gut kopiert. Oder wenn ich 2 mal das selbe Objekt in Recyclerview habe (Text bearbeiten) wenn ich einen editiere und den Fokus verliere wechselt der Text zum anderen Editier-Text .. –

Verwandte Themen