2016-07-29 18 views
0

Ich entwickle Android-Anwendung mit adaptivem Design. Für "große Land" -Bildschirmkonfiguration (d. H. Für Tablet) verfügt der Benutzer über eine Dual-Panel-Schnittstelle mit RecyclerView-Kopfzeilenliste auf der linken Seite und Detailinformationen (für einen spitzen Kopfzeileneintrag) auf der rechten Seite.Wann sollte RecyclerView's holder.itemView.performClick() korrekt aufgerufen werden?

Bei Anwendungsstart ist es für eine solche Konfiguration sinnvoll, den Klick des Benutzers auf den ersten Header-Listeneintrag zu emulieren, um das leere Detailinformationen-Feld abzudecken.

Die Frage „Wie“ item Klick zu emulieren für RecyclerView sehr beliebt ist und beantwortet wurde: Clicking on item programmatically in RecyclerView, etc ..

Aber ich kann nicht die Antwort auf die Frage „Wann“ ich richtig nennen finden itemView.performClick() von meinem Fragment, das die Ansichten besitzt?

My Methode:

public void clickItem(int position) { 
    if (null == mRecyclerView) 
    return; 
    SingerViewHolder holder = (SingerViewHolder) mRecyclerView.findViewHolderForAdapterPosition(position); 
    if (null == holder) 
    return; 
    holder.itemView.performClick(); 
} 

Die performClick() überspringt, weil Halter für jede Position null ist (beispielsweise 0). Ich habe die offensichtliche Antwort gefunden: RecyclerView hat seinen Inhalt noch nicht zu dem Zeitpunkt erstellt, als ich mAdapter.clickItem(0); anrufen Natürlich nenne ich es nach Einstellung des Adapters und auch nach dem Abrufen der Header-Liste Info aus dem Netzwerk mit notifyDataSetChanged();

Hier: Clicking on item programmatically in RecyclerView vorgeschlagen, nur eine kleine Pause vor dem Anruf itemView.performClick() hinzufügen, um Android zu RecyclerView Inhalt zu erstellen. Ist es ein richtiger und der einzige Weg? Ich glaube nicht ..

Nicht sicher bin ich richtig, ich habe versucht, andere Abhilfe: How to know when the RecyclerView has finished laying down the items? Aber das tun:

mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
    if (ScreenConfiguration.getScreenConfigurationState() == 
     Constants.ScreenConfigurationState.TABLET_LANDSCAPE) 
     /// dual-panel mode => click 1'st singer list item 
     mAdapter.clickItem(1); 
    } 
    }); 

wir ViewHolder sowieso bekommen nulled. Auch feuern diese Zuhörer viel viele Male und haben so schnell wie möglich entfernt werden ..

(sorry für looooong Vorgeschichte)

Also, die Frage ist: Gibt es einen richtigen Rückruf für RecyclerView richtig zu bekommen seine ViewHolder wertvoll ?

Antwort

0

können Sie versuchen, diese

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      recyclerView.findViewHolderForAdapterPosition(position).itemView.performClick(); 

     } 
    },100); 
Verwandte Themen