相关疑难解决方法(0)

如何强制RecyclerView.Adapter在所有元素上调用onBindViewHolder()

我有一个VerticalGridView正在使用RecyclerView.Adapter填充元素。我发现onBindViewHolder()如果潜在元素不在视口中,则不会调用该方法。不幸的是,这是NullPointerException由另一种方法引起的,因为我TextView在该onBindViewHolder()方法中捕获了一个引用并将其传递给外部变量以供以后操作。

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    final ViewHolder viewHolder = (ViewHolder) holder;
    viewHolder.txtCategoryName.setText(categories.get(position).getStrCategory());
    categories.get(position).setTxtViewReference(viewHolder.txtCategoryDefectTotal);
    viewHolder.categoryBoxRoot.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for(CategoryListItem catItem : categories){
                if(catItem.getStrCategory().equals(viewHolder.txtCategoryName.getText())){
                    int index = Defects.getInstance().getCategories().indexOf(catItem) + 1;
                    MainInterface.grids.get(index).bringToFront();
                    MainInterface.grids.get(index).setVisibility(View.VISIBLE);
                    for(VerticalGridView grid : MainInterface.grids){
                        int gridIndex = MainInterface.grids.indexOf(grid);
                        if(gridIndex != index){
                            grid.setVisibility(View.INVISIBLE);
                        }
                    }
                    break;
                }
            }

        }
    });
Run Code Online (Sandbox Code Playgroud)

据我了解,实例化对象TextView时会创建对gets 的引用Viewholder

public class ViewHolder extends …
Run Code Online (Sandbox Code Playgroud)

android textview recycler-adapter android-recyclerview

5
推荐指数
1
解决办法
1万
查看次数

RecyclerView中的CardView和OnClickListener问题

我使用CardView布局作为RecyclerView的Row.但是,我在将OnClickListener附加到布局时遇到问题.我正在使用以下布局

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="@dimen/unit_5"
    android:clickable="true"
    android:longClickable="true"
    card_view:cardCornerRadius="@dimen/unit_5">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/spinnerWidth"
        android:background="@drawable/row_item_background"
        android:clickable="true"
        android:orientation="vertical"
        android:padding="@dimen/dialog_left_padding">

<!-- Other items -->

        </LinearLayout>

        </android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

以下是我的适配器和ViewHolder

 private class SampleAdapter extends RecyclerView.Adapter<SampleViewHolder> {
        ArrayList<Item> arrayList;
        private LayoutInflater inflater;

        public SampleAdapter(Context context) {
            inflater = LayoutInflater.from(context);
            this.arrayList = new ArrayList<>();
            arrayList.addAll(items);
        }

        @Override
        public SampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = inflater.inflate(R.layout.layout1, parent, false);
            SampleViewHolder holder = new SampleViewHolder(view);
            holder.setClickHandler(handler);
            return holder;
        }

        @Override
        public void onBindViewHolder(SampleViewHolder holder, int position) { …
Run Code Online (Sandbox Code Playgroud)

android android-cardview android-recyclerview

3
推荐指数
1
解决办法
8476
查看次数