recyclerview Bağlı adaptör yok; atlama düzeni


241

Sadece RecyclerViewbenim kodumda yerine, yerine ListView.

Her şey yolunda gidiyor. Veriler görüntülenir.

Ancak hata iletileri günlüğe kaydediliyor:

15:25:53.476 E/RecyclerView: No adapter attached; skipping layout

15:25:53.655 E/RecyclerView: No adapter attached; skipping layout

aşağıdaki kod için:

ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

Gördüğünüz gibi bir adaptör taktım RecyclerView. Peki neden bu hatayı almaya devam ediyorum?

Aynı sorunla ilgili başka sorular okudum ama hiçbiri yardımcı olmuyor.


sanatçılar boş mu? setAdapter ve setLayoutManager'ı değiştirirseniz ne olur?
Blackbelt

Bir RecyclerView.Adapter kullanmak zorunda
Octopus38

12
Pencereye bağlanır bağlanmaz geri dönüşüm görünümünü başlatmıyorsanız, görüyor olabilirsiniz.
yigit

1
@yigit Verileri indirmek için güçlendirme bekliyorum ve bittikten sonra verilen kod çalışır!
15:13

3
Bu hata ne kadar ciddidir? Bu göz ardı edilebilir mi? Her neyse, hatayı önlemek için setAdapter (null) kullanıyorum.
priyankvex

Yanıtlar:


243

Bu ifadeleri "ana" iş parçacığından (örneğin onCreate()yöntem içinde ) çağırdığınızdan emin olabilir misiniz ? En kısa sürede aynı ifadeleri bir "gecikmeli" yöntemden çağırır. Benim durumumda ResultCallback, aynı mesajı alıyorum.

Benim Fragment, bir ResultCallbackyöntemin içinden aşağıdaki kodu çağırmak aynı mesajı üretir. Kodu onConnected()uygulamamdaki yönteme taşıdıktan sonra mesaj gitmişti ...

LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
list.setLayoutManager(llm);
list.setAdapter( adapter );

9
Ama önce verileri indirmem gerekiyor sonra göster!
equitharn

93
Öncelikle boş bir adaptör ayarlayın, verileriniz olur olmaz güncelleyin (bu benim için işe yarıyor).
Peter

3
Yiğit bunu önerdi!
equitharn

13
@equitharn Önce boş bir bağdaştırıcı ayarlamanız gerekir ve daha sonra veriler indirilir, benim için çalışan mAdapter.notifyDataSetChanged () öğesini arayın.
DomonLee

2
Bu çözüm bana yardımcı olmuyor. Aslında bu konudaki hiçbir çözüm bana yardımcı olmuyor. Birisi benim durumumda içine göz Lütfen artık burada
Pulak

41

Kodumda iki şeyi düzeltinceye kadar aynı iki hata mesajını alıyordum:

(1) Varsayılan olarak, içinde yöntemler uyguladığınızda RecyclerView.Adapterşunu üretir:

@Override
public int getItemCount() {
    return 0;
}

Kodunuzu şöyle yazacak şekilde güncellediğinizden emin olun:

@Override
public int getItemCount() {
    return artists.size();
}

Açıkçası öğelerinizde sıfır öğe varsa, ekranda sıfır şey görüntülenir.

(2) Bunu üst yanıtta gösterildiği gibi yapmıyordum: CardView layout_width = "match_parent" üst RecyclerView genişliğiyle eşleşmiyor

//correct
LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_listitem, parent, false);

//incorrect (what I had)
LayoutInflater.from(parent.getContext())
        .inflate(R.layout.card_listitem,null);

(3) DÜZENLEME: İLAVE: Ayrıca şu şekilde ayarladığınızdan emin olun RecyclerView:

<android.support.v7.widget.RecyclerView
    android:id="@+id/RecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

Böyle değil:

<view
    android:id="@+id/RecyclerView"
    class="android.support.v7.widget.RecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

İkinci yöntemi kullanarak bazı öğreticiler gördüm. Çalışırken bu hatayı da oluşturduğunu düşünüyorum.


1
my getItemCount () bu public int getItemCount() { return artists == null ? 0 : artists.size(); }ve LayoutInflater gibi görünüyorView itemView = LayoutInflater. from(parent.getContext()).inflate(R.layout.fragment_listitem, parent, false);
equitharn

bu benim için çalışıyor: @Override public int getItemCount () {return artist.size (); }
AstonCheah

4
Aman Tanrım. SO'ya geri döndüğünüzde ve zaten reddettiğiniz bir cevabı gördüğünüzde ve aynı aptal şeyi yaptığınızı anladığınız o an. Tekrar teşekkürler @Micro.
androidevil

20

Sizinle aynı duruma sahibim, ekran tamam, ancak hata yerinde görünüyor. Bu benim çözümüm: (1) CREATE'te RecyclerView & bind adaptörünü başlat ()

RecyclerView mRecycler = (RecyclerView) this.findViewById(R.id.yourid);
mRecycler.setAdapter(adapter);

(2) verileri aldığınızda notifyDataStateChanged öğesini çağırın

adapter.notifyDataStateChanged();

RecyclerView'ün kaynak kodunda, verilerin durumunu kontrol etmek için başka bir iş parçacığı vardır.

public RecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.mObserver = new RecyclerView.RecyclerViewDataObserver(null);
    this.mRecycler = new RecyclerView.Recycler();
    this.mUpdateChildViewsRunnable = new Runnable() {
        public void run() {
            if(RecyclerView.this.mFirstLayoutComplete) {
                if(RecyclerView.this.mDataSetHasChangedAfterLayout) {
                    TraceCompat.beginSection("RV FullInvalidate");
                    RecyclerView.this.dispatchLayout();
                    TraceCompat.endSection();
                } else if(RecyclerView.this.mAdapterHelper.hasPendingUpdates()) {
                    TraceCompat.beginSection("RV PartialInvalidate");
                    RecyclerView.this.eatRequestLayout();
                    RecyclerView.this.mAdapterHelper.preProcess();
                    if(!RecyclerView.this.mLayoutRequestEaten) {
                        RecyclerView.this.rebindUpdatedViewHolders();
                    }

                    RecyclerView.this.resumeRequestLayout(true);
                    TraceCompat.endSection();
                }

            }
        }
    };

DispatchLayout () içinde, içinde hata olduğunu bulabiliriz:

void dispatchLayout() {
    if(this.mAdapter == null) {
        Log.e("RecyclerView", "No adapter attached; skipping layout");
    } else if(this.mLayout == null) {
        Log.e("RecyclerView", "No layout manager attached; skipping layout");
    } else {

11

Bu sorun var, birkaç kez sorun recrollView ScrollView nesnesine koymak

Uygulamayı kontrol ettikten sonra, neden aşağıdaki gibi görünüyor. RecyclerView bir ScrollView içine yerleştirilirse, ölçüm adımı sırasında yüksekliği belirtilmez (ScrollView herhangi bir yüksekliğe izin verdiği için) ve sonuç olarak, görünüşte sıfır olan minimum yüksekliğe (uygulama başına) eşit olur.

Bunu düzeltmek için birkaç seçeneğiniz var:

  1. RecyclerView için belirli bir yükseklik ayarlama
  2. ScrollView.fillViewport öğesini true olarak ayarlayın
  3. Veya RecyclerView öğesini ScrollView dışında tutun. Bence, bu şimdiye kadar en iyi seçenek. RecyclerView yüksekliği sınırlı değilse - bu ScrollView'a konulduğunda geçerlidir - o zaman tüm Adaptörün görünümleri dikey olarak yeterli yere sahiptir ve bir kerede oluşturulur. Artık RecyclerView'in amacını bozan bir görünüm geri dönüşümü yoktur.

(Ayrıca takip android.support.v4.widget.NestedScrollViewedilebilir)


ScrollView.fillViewport doğru olarak ayarlamak sorunumu çözdü, bir demet teşekkürler
Eman

10

1) Hiçbir şey yapmayan ViewHolder oluşturun :)

// SampleHolder.java
public class SampleHolder extends RecyclerView.ViewHolder {
    public SampleHolder(View itemView) {
        super(itemView);
    }
}

2) Yine hiçbir şey yapmayan RecyclerView oluşturun :)

// SampleRecycler.java
public class SampleRecycler extends RecyclerView.Adapter<SampleHolder> {
    @Override
    public SampleHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(SampleHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 0;
    }
}

3) Şimdi gerçek geri dönüştürücünüz hazır olmadığında sadece aşağıdaki gibi bir örnek kullanın.

RecyclerView myRecycler = (RecyclerView) findViewById(R.id.recycler_id);
myRecycler.setLayoutManager(new LinearLayoutManager(this));
myRecycler.setAdapter(new SampleRecycler());

Bu en iyi çözüm değil ama işe yarıyor! Umarım bu yardımcı olur.


Merhaba, lütfen aynı hatayı aldım ve nerede geri dönüştürücünün boş bir adaptör geçmesi için hazır olup olmadığını kontrol etmem gerektiğini bilmiyorum) ve nerede geri dönüştürücünün hazır olup olmadığını kontrol edebilirim (veri ile adaptörü geçmek için)
James

Bu harika, işte bir drag'n drop tarzı gist.github.com/anonymous/bcf027945f08f40601090c55d6048e21
nmu

9

Bağdaştırıcıyı oluşturma aşaması sırasında ayarlamadığınızda olur:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    ....
}

public void onResume() {
    super.onResume();
    mRecyclerView.setAdapter(mAdapter);
    ....
}

Bağdaştırıcı ayarını boş bir veriyle ve veri çağrınız olduğunda onCreate'a taşıyın:

mAdapter.notifyDataSetChanged();

customadapter yapıcısında onCreate yöntemiyle veri ayarladığınızdan emin olun
Mohit Singh

4

Bağdaştırıcınızda bu yöntemi çağırmayı kaçırıp kaçırmadığınızı kontrol edin

@Override
public int getItemCount() {
    return list.size();
}

3

RecyclerView cihazınızın düzen yöneticisini şu şekilde ayarladığınızdan emin olun:

mRecyclerView.setLayoutManager(new LinearLayoutManager(context));

Yerine LinearLayoutManager, kullanabileceğiniz diğer çok düzen yöneticileri.


3

Benim gibi verileri retrofit ya da bunun gibi bir şey kullanarak bekliyorsanız bunu yaptım sabit hata vardı

Oncreate'den önce koy

private ArtistArrayAdapter adapter;
private RecyclerView recyclerView;

Oncreate'ınıza koyun

 recyclerView = (RecyclerView) findViewById(R.id.cardList);
 recyclerView.setHasFixedSize(true);
 recyclerView.setLayoutManager(new LinearLayoutManager(this));
 adapter = new ArtistArrayAdapter( artists , R.layout.list_item ,getApplicationContext());
 recyclerView.setAdapter(adapter);

Veri koymak aldığınızda

adapter = new ArtistArrayAdapter( artists , R.layout.list_item ,getApplicationContext());
recyclerView.setAdapter(adapter);

Şimdi ArtistArrayAdapter sınıfınıza gidin ve bunu yapacağınız şey, diziniz boşsa veya null ise GetItemCount değerini 0 yapmazsa döndürür.

@Override
public int getItemCount() {

    int a ;

    if(artists != null && !artists.isEmpty()) {

        a = artists.size();
    }
    else {

        a = 0;

     }

   return a;
}


2

Bunun nedeni, gerçek şişirilmiş düzen, recyclerView öğesini bulurken sizin başvurduğunuzdan farklı olmasıdır. Parçayı oluşturduğunuzda varsayılan olarak, onCreateView yöntemi aşağıdaki gibi görünür: return inflater.inflate(R.layout.<related layout>,container.false);

Bunun yerine, görünümü ayrı ayrı oluşturun ve bunu recyclerView'a başvurmak için kullanın View view= inflater.inflate(R.layout.<related layout>,container.false); recyclerview=view.findViewById(R.id.<recyclerView ID>); return view;


2

Önce adaptörü başlatın

public void initializeComments(){
    comments = new ArrayList<>();

    comments_myRecyclerView = (RecyclerView) findViewById(R.id.comments_recycler);
    comments_mLayoutManager = new LinearLayoutManager(myContext);
    comments_myRecyclerView.setLayoutManager(comments_mLayoutManager);

    updateComments();
    getCommentsData();

}

public void updateComments(){

    comments_mAdapter = new CommentsAdapter(comments, myContext);
    comments_myRecyclerView.setAdapter(comments_mAdapter);
}

Veri kümesi kümesinde bir değişiklik olduğunda, updateComments yöntemini çağırmanız yeterlidir.


2

RecyclerViewBir parçanın içindeki parçayı kullananlar ve diğer görünümlerden şişirenler için: parçanın tüm görünümünü şişirirken, RecyclerViewkök görünümüne bağladığınızdan emin olun .

Bağdaştırıcı için her şeyi doğru şekilde bağladım ve yapıyordum, ancak bağlamayı hiç yapmadım. Bu cevap tarafından @Prateek Agarwal bana hepsi var, ama burada daha fazla detaylandırılması olduğunu.

Kotlin

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {

    val rootView =  inflater?.inflate(R.layout.fragment_layout, container, false)
    recyclerView = rootView?.findViewById(R.id.recycler_view_id)
    // rest of my stuff
    recyclerView?.setHasFixedSize(true)
    recyclerView?.layoutManager = viewManager
    recyclerView?.adapter = viewAdapter
    // return the root view
    return rootView
}

Java

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView= inflater.inflate(R.layout.fragment_layout,container,false);
    recyclerview= rootView.findViewById(R.id.recycler_view_id);
    return rootView;
}

1
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

Sadece yukarıdaki kodu bununla değiştirin ve çalışması gerekir. Yanlış yaptığınız, mizanpaj yöneticisini çağırmadan önce setAdapter (adaptör) olarak adlandırılır.


1

Bu gerçekten basit bir hatadır, herhangi bir kod yapmaya gerek yoktur. Bu hata, etkinlik tarafından kullanılan yanlış düzen dosyası nedeniyle oluşur. IDE tarafından otomatik olarak etkinliğin varsayılan düzeni haline gelen bir düzenin v21 düzenini oluşturdum. Eski düzen dosyasında yaptığım tüm kodlar ve yeni kod sadece birkaç xml koduna sahipti, bu da hataya neden oldu.

Çözüm: Eski yerleşimin tüm kodlarını kopyalayın ve yerleşim v 21'e yapıştırın


1

Benim durumumda, onLocationChanged()emülatörde geri arama ve hata ayıklama içinde adaptörü ayarlıyordum . Bir yer değişikliği tespit etmediği için hiçbir zaman işten çıkarılmadı. Onları öykünücünün Genişletilmiş denetimlerine el ile ayarladığımda beklendiği gibi çalıştı.


1

Bu hatayı çözdüm. Sadece mizanpaj yöneticisi eklemeniz ve boş adaptörü eklemeniz yeterlidir.

Bu kodu beğenin:

myRecyclerView.setLayoutManager(...//your layout manager);
        myRecyclerView.setAdapter(new RecyclerView.Adapter() {
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                return null;
            }

            @Override
            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

            }

            @Override
            public int getItemCount() {
                return 0;
            }
        });
//other code's 
// and for change you can use if(mrecyclerview.getadapter != speacialadapter){
//replice your adapter
//}

1
yeni başlayanlar için yapıyorum
mehdi janbarari

1

Sadece aşağıdakileri ekleyin: RecyclerView

app:layoutManager="android.support.v7.widget.LinearLayoutManager"

Misal:

   <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        app:layout_constraintBottom_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

    </android.support.v7.widget.RecyclerView>

1

Bu hatayı aldım ve çözümü bulana kadar bir süre düzeltmeye çalıştım.

Özel bir yöntem buildRecyclerView yaptım ve ben ilk kez onCreateView ve sonra benim geri arama (sonra bir API veri getirme) sonra iki kez çağırdı. Bu benim Parçası benim yöntemi buildRecyclerView:

private void buildRecyclerView(View v) {
        mRecyclerView = v.findViewById(R.id.recycler_view_loan);
        mLayoutManager = new LinearLayoutManager(getActivity());
        ((LinearLayoutManager) mLayoutManager).setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mAdapter = new LoanAdapter(mExampleList);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);
}

Ayrıca, adaptörümde get-Item-Count yöntemini değiştirmeliyim, çünkü On-Create-View'da liste null ve bir hata yoluyla. Yani, get-Item-Count benim:

@Override
    public int getItemCount() {
        try {
            return mLoanList.size();
        } catch (Exception ex){return 0;}

    }

0

Benim durumumda ViewHolder sınıfında bulunan unutulmuş bir bileşendir ancak düzen dosyasında yer almamıştır


0

Ben de aynı sorun vardı ve ben onCreate yönteminde iki ayarı yerine kaynağımdan veri aldıktan sonra hem LayoutManage r hem de adaptör ayarlı olduğunu fark etti .

salesAdapter = new SalesAdapter(this,ordersList);
        salesView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
        salesView.setAdapter(salesAdapter);

Daha sonra veri değişimi konusunda bağdaştırıcıya bildirildi

               //get the Orders
                Orders orders;
                JSONArray ordersArray = jObj.getJSONArray("orders");
                    for (int i = 0; i < ordersArray.length() ; i++) {
                        JSONObject orderItem = ordersArray.getJSONObject(i);
                        //populate the Order model

                        orders = new Orders(
                                orderItem.getString("order_id"),
                                orderItem.getString("customer"),
                                orderItem.getString("date_added"),
                                orderItem.getString("total"));
                        ordersList.add(i,orders);
                        salesAdapter.notifyDataSetChanged();
                    }

0

Bu sorun, sizin için herhangi bir şey eklemediğiniz LayoutManageriçindir RecyclerView.

Başka bir nedeni, bu kodu bir NonUIThread içinde çağırıyor olmanızdır. Bu çağrıyı UIThread'de aradığınızdan emin olun.

Çözüm sadece bir eklemek zorunda olduğu LayoutManageriçin RecyclerViewönce setAdapterUI Thread.

recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

LayoutManager ayarını ertelemeniz gerekiyorsa bunu geri arama yönteminizden yapmanız gerekir: recyclerView.post (() -> {recyclerView.setLayoutManager (mGridLayoutManager); recyclerView.addItemDecoration (new ItemOffsetDecoration (itemGap));});
ievgen

0

Benim sorunum, geri dönüşümcümün görünümü şöyle görünüyordu

        <android.support.v7.widget.RecyclerView
        android:id="@+id/chatview"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">
    </android.support.v7.widget.RecyclerView>

Ne zaman böyle görünmeliydi

       <android.support.v7.widget.RecyclerView
        android:id="@+id/chatview"
        android:layout_width="395dp"
        android:layout_height="525dp"
        android:layout_marginTop="52dp"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_editor_absoluteX="8dp"></android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>

0

Örneğin, RecyclerViewadaptör sınıfınızda MyRecyclerViewAdapteraşağıdaki parametreleri içeren bir kurucu yapın.

MyRecyclerViewAdapter(Context context, List<String> data) {
    this.mInflater = LayoutInflater.from(context); // <-- This is the line most people include me miss
    this.mData = data;
}

mDataadaptöre ileteceğiniz verilerdir. Aktarılacak verileriniz yoksa isteğe bağlıdır. mInflaterolduğu LayoutInflaterOluşturduğunuz o nesne ve kullanmak OnCreateViewHolderadaptörün fonksiyonu.

Bundan sonra, adaptörü MainActivity'ye veya ana / UI iş parçacığında istediğiniz yere

MyRecyclerViewAdapter recyclerAdapter;
OurDataStuff mData;

    ....
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Like this:

        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerAdapter = new RecyclerAdapter(this, mData); //this, is the context. mData is the data you want to pass if you have any
        recyclerView.setAdapter(recyclerAdapter);
    }
   ....

0

Başlatılan boş listenin ve bağdaştırıcının en altta ayarlanması ve sonuçlar getirildiğinde notifyDataSetChanged çağrılmasıyla çözüldü.

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
    recyclerviewItems.setLayoutManager(linearLayoutManager);
    someAdapter = new SomeAdapter(getContext(),feedList);
    recyclerviewItems.setAdapter(someAdapter);

0

Bu sorunla hayatımın 16 dakikasını kaybettim, bu yüzden yaptığım bu inanılmaz utanç verici hatayı kabul edeceğim - Butterknife kullanıyorum ve bu parçadaki onCreateView'daki görünümü bağlıyorum.

Neden hiçbir layoutmanager - anlamaya uzun zaman aldı ama açıkçası görüşlerini enjekte böylece aslında boş olmayacak, bu yüzden geri dönüşüm asla boş olmayacak .. whoops!

@BindView(R.id.recycler_view)
RecyclerView recyclerView;

    @Override
public View onCreateView(......) {
    View v = ...;
    ButterKnife.bind(this, v);
    setUpRecycler()
 }

public void setUpRecycler(Data data)
   if (recyclerView == null) {
 /*very silly because this will never happen*/
       LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
       //more setup
       //...
    }
    recyclerView.setAdapter(new XAdapter(data));
}

Böyle bir sorun yaşıyorsanız, görüşünüzü izleyin ve böyle bir şey kullanın uiautomatorviewer


0

Pek bir cevap değil ama aynı sorun kodu doğru olsa bile yaşıyordu. Bazen, sadece en basit marka. Bu durumda, OP'nin hatası <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />aynı hatayı üreten Manifest'te de eksik olabilir .


0

Benim durumumda bir RecyclerView bir LinearLayout gömülü neden oldu.

Daha önce aşağıdaki gibi yalnızca bir kök RecyclerView içeren bir düzen dosyası vardı

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:listitem="@layout/fragment_products"

    android:name="Products.ProductsFragment"
    app:layoutManager="LinearLayoutManager"
    tools:context=".Products.ProductsFragment"

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"/>

Sorunun ayrılan 3 satır içinde olduğuna inanıyorum. Her neyse, bence bu basit bir sorun, yarın üzerinde çalışacağım; bu konu hakkında unutmadan önce ne buldum gerektiğini düşündüm.


0

Hatayı googling bu iş parçacığı rastladı beri başka bir cevap ekleme. Ben başlatmaya çalışıyordum PreferenceFragmentCompatama tercih XML onCreatePreferencesböyle şişirmek unuttum :

class SettingsFragment : PreferenceFragmentCompat() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val inflater = LayoutInflater.from(context)
        inflater.inflate(R.layout.fragment_settings, null)
    }

    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        // Missing this line here:
        //   setPreferencesFromResource(R.xml.settings, rootKey)
    }
}

İçsel PreferenceFragmentCompatolarak kullanılması gerektiğini fark edene kadar hata bir sırdı RecyclerView.


0

Eğer oluşturma aşamasında adaptörü ayar zamanlarda // bu olur: Çağrı notifyDataSetChanged () API yanıtı elde edildiğinde Onun Çalışma

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);


        magazineAdapter = new MagazineAdapter(getContext(), null, this );
        newClipRecyclerView.setAdapter(magazineAdapter);
        magazineAdapter.notifyDataSetChanged();

       APICall();
}

public void APICall() {
    if(Response.isSuccessfull()){
    mRecyclerView.setAdapter(mAdapter);
   }
}
Just move setting the adapter into onCreate with an empty data and when you have the data call:

mAdapter.notifyDataSetChanged();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.