簡體   English   中英

按字母順序更新 RecyclerView 項目

[英]Update RecyclerView items alphabetically

我有一個recyclerView ,我想按字母順序對項目進行排序。 我已經使用Collections.sort對列表進行排序,但是當我嘗試使用notifyDatasetChanged()更新列表時,它向我顯示了無法訪問的語句。

這個問題是否與適配器的范圍有關?

這是我的主要活動:

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

        setToolbar();
        mSort = (TextView) findViewById(R.id.sort);
        // mFilter = (TextView)findViewById(R.id.filter);
        mRecyclerView = (RecyclerView) findViewById(R.id.kictstarterRecycler);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        fetchKickStarter(mRecyclerView);
        setClickListner();
    }

    private void setClickListner() {
        mSort.setOnClickListener(this);
        //mFilter.setOnClickListener(this);
    }

    private void setToolbar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);

        final MenuItem searchItem = menu.findItem(R.id.action_search);
        final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        search(searchView);
        return true;
    }

    private void fetchKickStarter(final RecyclerView mRecyclerView) {
        ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
        Call<JsonElement> call = apiService.getKickStarter();
        call.enqueue(new Callback<JsonElement>() {
            @Override
            public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
                Log.d("resonse", response.toString());
                JsonElement object = response.body();
                Type listType = new TypeToken<List<Kickstarter>>() {
                }.getType();
                mKickStarter = new Gson().fromJson(object.getAsJsonArray(), listType);
                mAdapter = new KickstarterAdapter(mKickStarter, R.layout.kickstarter_row_layout, MainActivity.this);
                mRecyclerView.setAdapter(mAdapter);
            }

            @Override
            public void onFailure(Call<JsonElement> call, Throwable t) { }
        });
    }

    @Override
    public void onClick(View view) {
        mSort.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Collections.sort(mKickStarter, new Comparator<Kickstarter>() {
                    @Override
                    public int compare(Kickstarter item1, Kickstarter item2) {
                        return item1.getTitle().compareToIgnoreCase(item2.getTitle());
                        **mAdapter.notifyDataSetChanged()**;
                    }
                });
            }
        });
    }

我很困惑為什么我無法訪問mAdapter

      @Override
    public void onClick(View view) {
        mSort.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Collections.sort(mKickStarter, new Comparator<Kickstarter>() {
                    @Override
                    public int compare(Kickstarter item1, Kickstarter item2) {
                        return item1.getTitle().compareToIgnoreCase(item2.getTitle());

                    }
                });
            }
        });
       mAdapter.notifyDataSetChanged();
    }

也就是說,您在 return 語句之后調用mAdapter.notifyDataSetChanged()

Return 語句將在該點返回一個值。 當返回值時,代碼執行模式也路由到值接收方法。

所以return后的語句是無法訪問的語句。

嘗試這個

        @Override
        public void onClick(View view) {
            mSort.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Collections.sort(mKickStarter, new Comparator<Kickstarter>() {
                        @Override
                        public int compare(Kickstarter item1, Kickstarter item2) {
                            return item1.getTitle().compareToIgnoreCase(item2.getTitle());
                        }
                    });
                }
                mAdapter.notifyDataSetChanged();
            });
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM