Uygulamamdaki RecyclerView desteğini kullanıyorum ve en tuhaf şeyi görüyorum. Kaydırmak için dokunulana kadar hiçbir öğe görüntülenmiyor. Sonra, birdenbire, RecyclerView kendini doldurur. Bağdaştırıcıyı destekleyen listenin doldurulduğunu ve onCreatViewHolder ile onBindViewHolder öğesinin dokunma olayına kadar hiçbir zaman çağrılmadığını doğruladım.Destek RecyclerView dokunulana kadar hiçbir şey göstermiyor
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?attr/actionBarSize">
<android.support.v7.widget.RecyclerView
android:id="@+id/lv_inbox"
android:layout_width="match_parent"
android:layout_height="match_parent"
></android.support.v7.widget.RecyclerView>
</RelativeLayout>
Ben recyclerview kullanıyorum: Burada
public class InboxAdapter extends RecyclerView.Adapter<InboxAdapter.ViewHolder> {
List<Conversation> mConversations; //initialized in contructor
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = mInflater.inflate(R.layout.inbox_item, parent, false);
ViewHolder holder = new ViewHolder(v);
Log.d(LOG_TAG, "oncreateviewholder : " + viewType); //never called when I first bind the adapter
return holder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
final Conversation item = mConversations.get(position);
Log.d(LOG_TAG, "binding " + position);
...
}
@Override
public int getItemCount() {
Log.d(LOG_TAG, "item count: " + mConversations.size());
return mConversations.size();
}
/**
* Empties out the whole and optionally notifies
*/
public void clear(boolean notify) {
mConversations.clear();
if (notify) {
notifyDataSetChanged();
}
}
public void addAll(List<Conversation> conversations) {
mConversations.addAll(conversations);
notifyDataSetChanged();
}
}
düzen dosyasıdır: Burada
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
Drawable divider = new ColorDrawable(ProfileInfo.getCurrentProfileColor());
mInboxList.addItemDecoration(new DividerItemDecoration(getActivity(), divider, false));
mInboxList.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
mInboxList.setAdapter(new InboxAdapter(getActivity(), new ArrayList<Conversation>()));
new AsyncTask<Void, Void, List<Conversation>{
public List<Conversation> doInBackground(...){
//load the conversations
return conversations;
}
public void onPostExecute(List<Conversation> conversations){
((InboxAdapter) mInboxList.getAdapter()).clear(false);
((InboxAdapter) mInboxList.getAdapter()).addAll(conversations);
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
Adaptörümdeki bir özü var: Burada
Ben recyclerview kurmak nasıl -v7: 21.0.3 sürüm 4.4.4 ile bir Moto X üzerinde çalışıyor.
DÜZENLEME: Eğer RecyclerView.Adapter doğru bildirim yöntemleri demeyeceğiz, çünkü büyük ihtimalle
if (mInboxList.getAdapter().getItemCount() > 0) {
mInboxList.smoothScrollToPosition(0);
}
Destek Kitaplığı 22.2.1 denediniz mi? Birçok hata düzeltildi. –
'EDIT' cevabınız olmalı :) –
wow ... bu android hata mı? – Zyoo