首页 > 解决方案 > 调用 onNavigationItemSelected 方法时视图正在更改一次

问题描述

在应用程序的这一部分中,我使用 Blogger API 和改造从服务器获取数据,我onNavigationItemSelected在特定项目单击时使用方法getItemsByLabel调用哪个改造onResponse方法将调用并获取所选类别的数据,问题是它在我第一次单击时工作在项目和视图之后没有改变,为了进一步澄清看这个gif

这个 getItemsByLabel 方法

public void getItemsByLabel(String label) {
        String url = BloggerAPI.BASE_URL + "search?q=label:" + label + "&key=" + BloggerAPI.KEY;

        Log.e("Label :",url);

        if (token != "") {
            url = url + "&pageToken=" + token;
        }
        if (token == null) {
            return;
        }

        progress.setVisibility(View.VISIBLE);
        final Call<PostList> postList = BloggerAPI.getService().getPostList(url);
        postList.enqueue(new Callback<PostList>() {
            @Override
            public void onResponse(Call<PostList> call, Response<PostList> response) {
                items.clear();
                recyclerView.swapAdapter(adapter, false);
                PostList list = response.body();
                token = list.getNextPageToken();
                items.addAll(list.getItems());
                adapter = new PostAdapter(MainActivity.this,items);
                adapter.notifyDataSetChanged();
                Toast.makeText(MainActivity.this, "Sucess", Toast.LENGTH_LONG).show();
                progress.setVisibility(View.GONE);
            }

            @Override
            public void onFailure(Call<PostList> call, Throwable t) {
                Toast.makeText(MainActivity.this, "Error occured", Toast.LENGTH_LONG).show();
                Log.i(TAG, "onFailure: " + t.toString());
            }
        });

    }

我使用items.clear();recyclerView.swapAdapter(adapter, false);使用标签选择的项目更改列表中的项目,并在此处使用它的 onNavigationItemSelected 方法

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.

        switch (item.getItemId()) {
            case R.id.home:
                getData();
                break;
            case R.id.accessory:
                getItemsByLabel("Accessory");
                break;
            case R.id.arcade:
                getItemsByLabel("Arcade");
                break;
            case R.id.fashion:
                getItemsByLabel("Fashion");
                break;
            case R.id.food:
                getItemsByLabel("Food");
                break;
            case R.id.heath:
                getItemsByLabel("Heath");
                break;
            case R.id.lifeStyle:
                getItemsByLabel("Lifestyle");
                break;
            case R.id.sports:
                getItemsByLabel("Sports");
                break;
            case R.id.settings:
                break;
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

标签: androidretrofitbloggerandroid-recyclerview

解决方案


推荐阅读