【问题标题】:"Recycler View..No adapter attached: skipping layout" error using Async Task in a fragment在片段中使用异步任务时出现“回收站视图..未连接适配器:跳过布局”错误
【发布时间】:2015-08-08 19:31:01
【问题描述】:
public class ReferralStatus extends Fragment {

public MyPendingAdapter pAdapter;
public RecyclerView recyclerView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View layout= inflater.inflate(R.layout.fragment_referral_status, container, false);

    recyclerView = (RecyclerView) layout.findViewById(R.id.pendingRecyclerList);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    return layout;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    PendingAsyncTask pendingRunner = new PendingAsyncTask();
    pendingRunner.execute("someURL");
}

public class MyPendingAdapter extends RecyclerView.Adapter<MyPendingAdapter.PendingUserHolder> {

    Context context;
    String[] pendingUserArray, socialSitesArray;


    public MyPendingAdapter(Context c, String[] pendingUserList, String[] socialSites) {

        Log.d("golu", "pendingConstructor");
        this.context=c;
        this.pendingUserArray=pendingUserList;
        this.socialSitesArray=socialSites;
    }

    public class PendingUserHolder extends RecyclerView.ViewHolder{

        TextView pendingUsername;
        TextView socialSite;

        public PendingUserHolder(View v){
            super(v);
            pendingUsername = (TextView) v.findViewById(R.id.pendingUsername);
            socialSite= (TextView) v.findViewById(R.id.socialSiteLabel);
        }
    }

    @Override
    public PendingUserHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        Log.d("golu", "pendingHolder");
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.pending_list_row,parent,false);
        PendingUserHolder holder = new PendingUserHolder(row);
        return holder;
    }

    @Override
    public void onBindViewHolder(PendingUserHolder holder, int position) {
        holder.pendingUsername.setText(pendingUserArray[position]);
        holder.socialSite.setText(socialSitesArray[position]);
    }

    @Override
    public int getItemCount() {
        Log.d("golu", "pendingCount");
        return pendingUserArray.length;
    }
}

public class PendingAsyncTask extends AsyncTask<String,Void,Boolean>{

    String [] pendingUserList, socialSitesMedium;



    @Override
    protected Boolean doInBackground(String... params) {

        //just returning simple boolean value
        return true;

    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        if(aBoolean)
        {
             //Hardcoding Arrays for now                      
             pendingUserList=getResources().getStringArray(R.array.pendingUserList);
                         socialSitesMedium=getResources().getStringArray(R.array.socialSites);



             pAdapter = new MyPendingAdapter(getActivity(),pendingUserList,socialSitesMedium);
             recyclerView.setAdapter(pAdapter);


        }
    }
}

//这里是XML文件

<LinearLayout

android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/pending"
            android:id="@+id/pendingLabel"
            android:textColor="#FF0000"
            android:textAllCaps="true"
            android:textStyle="bold"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:layout_marginLeft="10dp" />

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

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

//它显示跳过布局错误....我做错了什么? //仅供参考:我尝试初始化 RecyclerView 并在 onPostExecute 中设置 LinearLayoutManager ......它仍然没有工作:/

【问题讨论】:

    标签: android android-fragments android-asynctask android-recyclerview


    【解决方案1】:

    问题出在 OnCreateView 方法上 您需要在那里初始化适配器并将适配器设置为回收器视图。 由于适配器不会传递任何数据,您可以稍后更新显示。 由于 onCreateView 方法是更新显示的方法,因此初始化它很重要,否则会报错“没有附加适配器跳过显示”

    【讨论】:

      【解决方案2】:

      我做错了什么?

      RecyclerView(以及 ListView)需要 Adapter 才能工作,因为适配器是这些小部件获取数据以显示的方式。您的代码中有适配器,但缺少告诉 RecyclerView 使用它的代码:setAdapter()

      详情请见https://developer.android.com/training/material/lists-cards.html

      【讨论】:

      • 我确实在 onPostExecute 中设置了适配器吗?
      • @user2508635 在onCreateView 中进行操作。在 onPostExecute 中更新填充您的 recyclerview 的数据后,您可以在 onPostExecute 中刷新您的适配器
      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多