【问题标题】:RecyclerView with BottomNavigationView won't show changes in showing items带有 BottomNavigationView 的 RecyclerView 不会显示显示项目的更改
【发布时间】:2019-02-21 15:47:23
【问题描述】:

当我尝试重构我的应用程序并使用依赖注入时,我的“RecyclerView”和“BottomNavigationView”出现问题。问题是当我单击导航视图中的项目时,“RecyclerView”不会更改列表中的项目。我的 HTTP 请求有一个代码状态,并根据该请求获取项目。我检查了 API 并且工作正常,在“LOGCAT”中也有 200 个代码。这是零件的代码。当活动打开应用程序将显示带有 0 状态代码的数据,然后当我们用底部更改状态代码时,什么都不会改变,我仍然得到相同的列表。

这不是重复的,因为我正在使用依赖注入和 MVP,并且我还添加了依赖注入标签,因为当我使用依赖注入并且我是初学者时会发生这种情况。

活动:我正在为数据调用 onCreate 中的方法并查看这里的数据。

private void setupData() {
    bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            if (item.getItemId() == R.id.new_request) {
                mPresenter.setupLoadOrders("0");
            } else if (item.getItemId() == R.id.canceled_request) {
                mPresenter.setupLoadOrders("-1");
            } else if (item.getItemId() == R.id.submited_request) {
                mPresenter.setupLoadOrders("1");
            } else if (item.getItemId() == R.id.added_request) {
                mPresenter.setupLoadOrders("2");
            }
            return true;
        }
    });

    mPresenter.setupLoadOrders("0");
}

private void setupView() {

    recyclerRequests.setLayoutManager(new LinearLayoutManager(this));
    recyclerRequests.setHasFixedSize(true);
}
@Override

public void displayOrders(List<Requests> requests) {
    requestAdapter.setData(requests);
    recyclerRequests.setAdapter(requestAdapter);
}

和演示者:

@Override
public void setupLoadOrders(String statusReq) {

        compositeDisposable.add(atlasApiReference.getRequest(Common.currentUser.getPhone(), statusReq)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Consumer<List<Requests>>() {
                    @Override
                    public void accept(List<Requests> requests) throws Exception {
                        mView.displayOrders(requests);
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Log.e("Log",throwable.getMessage());
                    }
                }));
}

public void unSubscribe()
{
    AtlasRxJavaUtil.unsubscribeClear(compositeDisposable);
}

和适配器:

private List<Requests> requestsList;

@Inject
public RequestAdapter() {
    requestsList = new ArrayList<>();
}

@NonNull
@Override
public RequestAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new RequestAdapterViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.request_detail_layout, parent, false));

}

@Override
public void onBindViewHolder(@NonNull RequestAdapterViewHolder holder, final int position) {
    holder.request_number.setText(new StringBuilder(" ").append(requestsList.get(position).getId()));
    holder.request_name.setText(new StringBuilder(" ").append(requestsList.get(position).getNameReq()));


}


public class RequestAdapterViewHolder extends RecyclerView.ViewHolder {



    public PsTextView request_number,request_name;
    CardView request_detail_layout;

        public RequestAdapterViewHolder(final View itemView) {
            super(itemView);

            request_number = (PsTextView)itemView.findViewById(R.id.request_number);
            request_name = (PsTextView)itemView.findViewById(R.id.request_name);
            request_detail_layout = (CardView)itemView.findViewById(R.id.request_detail_layout);

            request_detail_layout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Common.currentRequest = requestsList.get(getAdapterPosition());
                    itemView.getContext().startActivity(new Intent(itemView.getContext(), ShowDetail.class));
                }
            });

        }

}

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


public void setData(List<Requests> requestsList){

        this.requestsList.addAll(requestsList);
        notifyDataSetChanged();

}

【问题讨论】:

    标签: android dependency-injection android-recyclerview bottomnavigationview


    【解决方案1】:

    尝试删除以下行:

    recyclerRequests.setHasFixedSize(true);
    

    有关此post 的更多信息。

    【讨论】:

      猜你喜欢
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多