java - RecyclerView 在第二次点击时不显示项目

标签 java android android-layout android-recyclerview

我有一个 RecyclerView,我用它来显示我通过向远程 api 发出请求而获得的列表。该列表在 Activity 第一次出现时显示,但是当我返回并再次返回 Activity 时,该列表不显示。我该如何解决这个问题? 这就是我称之为 recyclerview 的 Activity 。

public class DisplayMessage extends AppCompatActivity {
    RecyclerView recyclerView;

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

        LanguageAdapter languageAdapter = new LanguageAdapter(this);
        recyclerView.setAdapter(languageAdapter);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);

    }
}

这是适配器类。

public class LanguageAdapter extends RecyclerView.Adapter<LanguageAdapter.MyViewHolder> {

    ArrayList<Language> languageArrayList;

    public LanguageAdapter(Context context) {
        this.languageArrayList = new ArrayList<Language>();
        RequestQueue queue = Volley.newRequestQueue(context);
        String url ="https://api.bounswe2019group9.tk/contents/languages";
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray data = (JSONArray) response.get("data");
                            for(int i=0; i<data.length();i++){
                                Language lang = new Language((String) data.get(i));
                                languageArrayList.add(lang);
                                Log.i("api", ""+lang.getLanguageName());
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                }
                , new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("language_selection", "Error on request to get language list");

            }
        });
        queue.add(jsonObjectRequest);
    }

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

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.languageName.setText(languageArrayList.get(position).getLanguageName());
    }

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


    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public TextView languageName;
        public RelativeLayout relativeLayout;

        public MyViewHolder(View itemView) {
            super(itemView);
            this.languageName = (TextView) itemView.findViewById(R.id.language);
            this.relativeLayout = (RelativeLayout) itemView.findViewById(R.id.relativeLayout);
        }

        @Override
        public void onClick(View v) {

        }


    }
}

最佳答案

OnCreate() 方法仅在创建 Activity 时调用一次。您已经在 OnCreate() 中使用语言列表设置了适配器,这就是它为什么只在第一次设置的原因。当您重新进入同一屏幕时,不会再次调用 OnCreate。

您必须在 OnResume() 方法中设置适配器,因为每次访问此屏幕时都会调用此方法。

关于java - RecyclerView 在第二次点击时不显示项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399540/

相关文章:

java - Slick2D 获取图像 x 和 y

android - FragmentTabHost 图形布局不呈现

Android:内容的确切位置:\\

java - RecyclerView 不显示我的数据

android - 打开键盘会破坏布局

android - 形状 XML 中的边框

Android 应用程序始终保持横向

java - 私有(private)对象字段可以是最终的,netbeans 警告

java - 忽略来自 Spring Bean 后处理器的依赖库的 @Value 字段处理

java - Eratosthenes算法的并行筛寻找素数