RecyclerView не показывает элементы при втором нажатии - PullRequest
1 голос
/ 15 октября 2019

У меня есть RecyclerView, который я использую для отображения списка, который я получаю при выполнении запроса к удаленному API. Список отображается в первый раз, когда появляется действие, но когда я возвращаюсь и снова возвращаюсь к активности, список не отображается. Как я могу решить это? Это мероприятие, которое я называю «обзор переработчика».

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

        }


    }
}

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Метод OnCreate () вызывается только один раз при создании действия. Вы установили адаптер со списком языков в OnCreate () и поэтому он устанавливается только в первый раз. При повторном входе в тот же экран OnCreate больше не будет вызываться.

Необходимо установить адаптер в методе OnResume (), поскольку этот метод будет вызываться каждый раз, когда вы посещаете этот экран.

0 голосов
/ 15 октября 2019

В вашем классе Activity переопределите метод onResume , и внутри него также объявляются следующие коды -

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