简体   繁体   English

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

[英]RecyclerView Not Showing Items on Second Click

I have a RecyclerView that I am using to display a list that I obtain from making a request to remote api.我有一个 RecyclerView,用于显示从向远程 api 发出请求获得的列表。 The list is shown on the first time that the activity appears but when I go back and come back to activity again, the list doesn't show.该列表在第一次出现活动时显示,但是当我 go 返回并再次返回活动时,列表不显示。 How can I solve this?我该如何解决这个问题? This is the activity that I call the recyclerview.这就是我称之为recyclerview 的活动。

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);

    }
}

This is the Adapter class.这是适配器 class。

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() method gets called only once when activity is created. OnCreate() 方法仅在活动创建时被调用一次。 You have set the adapter with the language list in OnCreate() and that it why it gets set only at the first time.您已经在 OnCreate() 中使用语言列表设置了适配器,这就是为什么它只在第一次设置的原因。 When you reenter on the same screen then OnCreate won't get called again.当您在同一屏幕上重新输入时,不会再次调用 OnCreate。

You have to set the adapter in the OnResume() method because this method will get called every time when you visit this screen.您必须在 OnResume() 方法中设置适配器,因为每次访问此屏幕时都会调用此方法。

In your Activity class, override an onResume method, and inside that also declare the following codes-在您的活动 class 中,覆盖onResume方法,并在其中声明以下代码 -

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM