【问题标题】:No adapter attached in recyclerViewrecyclerView 中没有附加适配器
【发布时间】:2017-09-01 12:28:19
【问题描述】:

它给了我一个空白活动并且没有在其中显示我的列表..我不知道错误是什么。有谁能帮忙吗? 这是我的代码:

    public class Home extends AppCompatActivity implements HomeCallBack {

    public ArrayList<info> info;
    private  Adaptor myadaptor;
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;


    @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        recyclerView=(RecyclerView)findViewById(R.id.recycle_view);

        BackgroundHome backgroundHome=new BackgroundHome(this,this);
        backgroundHome.execute();


    }

    @Override
    public void processData(JSONArray data)
    {

        JSONObject js;

                if(data!=null)
                {
                     info=new ArrayList<>();

                    try
                    {
                        for(int i=0;i<data.length();i++)
                        {
                            js =data.getJSONObject(i);
                            info in=new info(js.getString("Names"),js.getString("city"),js.getString("university"));
                            info.add( in);




                        }



                        myadaptor=new Adaptor(info);

                        recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
                        LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
                        recyclerView.setLayoutManager(mLayoutManager);
                        recyclerView.setItemAnimator(new DefaultItemAnimator());
                        recyclerView.setAdapter( myadaptor);

当我在 create 方法中调用 recyclerView.setAdapter(myadapter) 时,它会给我一个错误并停止应用程序。 这是我的适配器代码:

public class Adaptor extends RecyclerView.Adapter<Adaptor.ViewHolder> {


private  ArrayList<info> info;

public Adaptor(ArrayList<info> info) {
    this.info = info;
}


public void updateList(ArrayList<info> data) {
   info = data;
    notifyDataSetChanged();
}

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


    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.list_view, parent, false);

         return new ViewHolder(itemView);


}



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

    info i= info.get(position);
    holder.name.setText(i.getName());
    holder.city.setText(i.getCity());
    holder.city.setText(i.getUniversity());


}

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


public class ViewHolder extends RecyclerView.ViewHolder {

    TextView name, city, uni;


    public ViewHolder(final View v) {
        super(v);
        name = (TextView) v.findViewById(R.id.name);
        city = (TextView) v.findViewById(R.id.city);
        uni = (TextView) v.findViewById(R.id.university);

     }


   }

   }

这是我的适配器类,上面是我的 Home 活动,我正在尝试显示我的列表

【问题讨论】:

  • 粘贴您的"Adaptor" 代码
  • 它给你什么错误?
  • 未连接适配器,跳过布局@Piyush
  • 完成!我现在附加了我的适配器类@jlively
  • 在此处发布您的调用堆栈

标签: android json android-recyclerview


【解决方案1】:

我认为问题在于您尝试将适配器设置在主线程之外。你应该使用这个代码:

 @Override
    public void processData(JSONArray data)
    {

        JSONObject js;

                if(data!=null)
                {
                     info=new ArrayList<>();

                    try
                    {
                        for(int i=0;i<data.length();i++)
                        {
                            js =data.getJSONObject(i);
                            info in=new info(js.getString("Names"),js.getString("city"),js.getString("university"));
                            info.add( in);




                        }


   runOnUiThread(new Runnable() {

        @Override
        public void run() {
            myadaptor=new Adaptor(info);

                            recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
                            LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
                            recyclerView.setLayoutManager(mLayoutManager);
                            recyclerView.setItemAnimator(new DefaultItemAnimator());
                            recyclerView.setAdapter( myadaptor);
           }
        });

【讨论】:

  • 我应该在哪里添加这个方法??
  • 用我给的函数换行myadaptor...
  • @RaheelSajjad 我已经更改了代码以便向您解释
  • 是的,我也将您的代码放在这里,但它在 Home.runOnUiThread 上给了我错误
  • 删除“家”。所以
【解决方案2】:

尝试在 onCreate 中初始化您的适配器、recyclerview 和 layoutmanager。然后当您在 processData 中的调用完成时,获取列表并调用 mAdapter.notifyDataSetChanged。

public class Home extends AppCompatActivity implements HomeCallBack {

public ArrayList<info> info;
private  Adaptor myadaptor;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;

@Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    recyclerView=(RecyclerView)findViewById(R.id.recycle_view);
    info = new ArrayList<>();
    myadaptor=new Adaptor(info);
    recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(myadaptor);

    BackgroundHome backgroundHome=new BackgroundHome(this,this);
    backgroundHome.execute();
}

@Override
public void processData(JSONArray data) {
    JSONObject js;
            if(data!=null) {
                try {
                    for(int i=0; i<data.length(); i++)
                    {
                        js = data.getJSONObject(i);
                        info in = new info(js.getString("Names"),js.getString("city"),js.getString("university"));
                        info.add(in);
                    }

                    myadaptor.notifyDataSetChanged();

【讨论】:

  • 错误是我认为适配器类中的 onCreateViewHolder 方法。看看有没有?
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 2016-07-15
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
相关资源
最近更新 更多