当前位置: 首页 > 知识库问答 >
问题:

回收器视图未更新,日志表示viewrootimpl:sendUserActionEvent()mView==null

冉俊德
2023-03-14

我知道这个问题已经被问了很多次,我已经尝试了这里和这里建议的所有方法,但我仍然不能解决这个问题,所以我在这里再问一次。

12-26 23:46:13.890 1509-1509/com.example.vuclip.gallaryapp D/ViewRootImpl: #3 mView = null

12-26 23:46:13.910 1509-1509/com.example.vuclip.gallaryapp E/ViewRootImpl: sendUserActionEvent() mView == null

我可以添加我的代码,如果你们想,但我不认为有任何错误在我的代码。请帮我做这个,谢谢。

更新

//Main activity
public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getSimpleName();
private static final String apiURL = "http://api.androidhive.info/json/glide.json";
private RecyclerView recyclerView;
private ArrayList<Image> images;
private ProgressDialog pDialog;
private MyRecyclerAdapter mAdapter;

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

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    pDialog = new ProgressDialog(this);
    images = new ArrayList<>();

    mAdapter = new MyRecyclerAdapter(images, getApplicationContext());
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 2);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(mAdapter);

    fetchImages(apiURL);
}


private void fetchImages(String url) {
    new JSONDownloader().execute(url);
}

private void parseJson(String jsonString) {
    Log.d(TAG, "parseJson: json = " + jsonString);
    images.clear();
    JSONParser parser = new JSONParser(jsonString);
    images = parser.parse();
    mAdapter.notifyDataSetChanged();
}

private class JSONDownloader extends AsyncTask<String, Void, String> {
    @Override
    protected void onPreExecute() {
        pDialog.setMessage("Downloading JSON");
        pDialog.show();
    }

    @Override
    protected String doInBackground(String... params) {
       String json = "";
        try {
            HttpHelper http = new HttpHelper(new URL(params[0]));
            json = http.getJSON();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        Log.d(TAG, "doInBackground: json received = " + json);
        return json;
    }

    @Override
    protected void onPostExecute(String response) {
        if (pDialog.isShowing()) pDialog.cancel();

        parseJson(response);
    }
    }
}

回收器适配器

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder>{
private static final String TAG = MyRecyclerAdapter.class.getSimpleName();
private List<Image> images;
private Context context;

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.gallery_thumbnail,parent,false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Image image = images.get(position);
    Log.d(TAG, "onBindViewHolder: image URL = " + image.getMedium_thumb_url());
    Glide.with(context)
            .load(image.getMedium_thumb_url())
            .thumbnail(0.5f)
            .crossFade()
            .into(holder.imageView);
}

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

class MyViewHolder extends RecyclerView.ViewHolder{

    private ImageView imageView;
    public MyViewHolder(View itemView) {
        super(itemView);
        imageView = (ImageView) itemView.findViewById(R.id.thumbnail);
    }
}

public MyRecyclerAdapter(List<Image> images, Context context) {
    this.images = images;
    this.context = context;
}
}

共有1个答案

盖玉石
2023-03-14

您正在创建ArrayList的新引用,这与您在RecycerView适配器上设置的引用不同。

而是使用。addall()属性创建新的引用。

private void parseJson(String jsonString) {
   Log.d(TAG, "parseJson: json = " + jsonString);
   images.clear();
   JSONParser parser = new JSONParser(jsonString);
   // Use .addAll and avoid new refernce
   images.addAll(parser.parse());
   mAdapter.notifyDataSetChanged();
}
 类似资料:
  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 我正在制作一个应用程序,其中有回收器视图。但我无法在我的应用程序中看到回收器视图。当我检查Logcat时,它显示'e/recyclerview:No adapter attached;正在跳过布局‘。为什么会发生这种情况,我该如何修复? 我的主要活动代码: 我的适配器(PostAdapter.java)类代码:

  • 我正在使用SQLite数据库填充RecyclerView。我想让RecyclerView实时更新。但我失败了。我尝试过使用“notifyDataSetChanged()”但它不起作用。 你能不能也告诉我如何通过制作一个“新适配器”来刷新回收器视图。 哪个是更好的通知DataSetChanged();或任何其他? 这是我的回收水 **编辑: adapter.update数据(列表); 在“locat

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • 您好,我目前正在使用Recyclerview ListAdapter,我想知道什么是等价的通知DataSetChanged或如何在添加值/记录后更新整个列表。? 我目前使用过此方法,但如果不刷新,则不会更新。 我想回到回收器视图。适配器和通知数据设置更改()。这样我的问题就解决了,你觉得怎么样?提前谢谢。

  • 当我尝试将Image URL解析到ImageView中时,回收器视图不显示,活动为空。我正在使用Picasso将图像加载到适配器类中的onBinfViewHolder方法中。这是相关代码 代表: } RepRvAdapter: } 解析JSON数据的方法: 现在,我有一行解析图像URL的代码被注释掉了。行取消注释后,活动将不再显示。如何获取要在ImageView中解析和显示的图像url?我认为这可