【问题标题】:Android : RecyclerView onclick update another RecyclerViewAndroid : RecyclerView onclick 更新另一个 RecyclerView
【发布时间】:2016-03-15 06:35:47
【问题描述】:

我必须在我的 android 活动中实现 2 个回收器视图,其中第一个回收器视图显示类别,第二个将显示所选类别中的项目。我已经实现了第一个回收站视图。

现在点击回收视图中的项目时,我需要突出显示该视图,还需要显示该类别下的项目。当我单击另一个视图时,第一个视图突出显示应更改为单击的新视图并显示该类别中的项目。此外,当我进入活动时,默认情况下,第一个项目应在第一个回收站视图中突出显示,相应的项目应显示在第二个回收站视图中。如何使用视图的 onclick 或 onTouch 侦听器来实现此任务?

请帮助我。以下是我的代码:

expGrpAdptr=new RecyclerAdapter(this,listDataHeader,prgmImages);
rcyGroups.setAdapter(expGrpAdptr);

RecyclerAdapter.java:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

List<COAAccount> listDataHeader;
int []  prgmImages;
Context context;

public RecyclerAdapter(Context activity, List<COAAccount> listDataHeader, int[] prgmImages) {
    this.listDataHeader = listDataHeader;
    this.prgmImages = prgmImages;
    context=activity;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.expense_group_view, parent, false);
    ViewHolder vh = new ViewHolder(v);
    v.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });
    return vh;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.grpCoa=listDataHeader.get(position);
    holder.txtGrpName.setText(holder.grpCoa.getStrName());
    holder.rImgGrpExp.setImageResource(prgmImages[0]);
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    COAAccount grpCoa;
    TextView txtGrpName;
    ImageView rImgGrpExp;
    ImageButton imgGrpEdit;
    boolean checkedItem;

    public ViewHolder(View itemView) {
        super(itemView);

        txtGrpName=(TextView) itemView.findViewById(R.id.txtGrpName);
        rImgGrpExp=(ImageView) itemView.findViewById(R.id.rImgGrpExp);
        imgGrpEdit=(ImageButton) itemView.findViewById(R.id.imgGrpEdit);

    }
}

}

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:
    public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
    
        List<COAAccount> listDataHeader;
        int []  prgmImages;
        Context context;
    
        private final OnCOAAccountClickListener onCOAAccountClickListener;
    
        public interface OnCOAAccountClickListener {
            void onClicked(COAAccount account);
        }
    
        public RecyclerAdapter(Context activity, List<COAAccount> listDataHeader, int[] prgmImages, OnCOAAccountClickListener onCOAAccountClickListener) {
            this.listDataHeader = listDataHeader;
            this.prgmImages = prgmImages;
            context=activity;
            this.onCOAAccountClickListener = onCOAAccountClickListener;
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.expense_group_view, parent, false);
            ViewHolder vh = new ViewHolder(v);
            return vh;
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            holder.grpCoa=listDataHeader.get(position);
            holder.txtGrpName.setText(holder.grpCoa.getStrName());
            holder.rImgGrpExp.setImageResource(prgmImages[0]);
    
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    onCOAAccountClickListener.onClicked(listDataHeader.get(position));
                }
            });
        }
    
        @Override
        public int getItemCount() {
            return listDataHeader.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            COAAccount grpCoa;
            TextView txtGrpName;
            ImageView rImgGrpExp;
            ImageButton imgGrpEdit;
            boolean checkedItem;
    
            public ViewHolder(View itemView) {
                super(itemView);
    
                txtGrpName=(TextView) itemView.findViewById(R.id.txtGrpName);
                rImgGrpExp=(ImageView) itemView.findViewById(R.id.rImgGrpExp);
                imgGrpEdit=(ImageButton) itemView.findViewById(R.id.imgGrpEdit);
    
            }
        }
    }
    

    在您的活动代码中:

    expGrpAdptr=new RecyclerAdapter(this,listDataHeader,prgmImages, new OnCOAAccountClickListener() {
        @Override
        public void onClicked(COAAccount account) {
            // TODO : Update your another adapter of another recyclerview.
        }
    });
    rcyGroups.setAdapter(expGrpAdptr);
    

    【讨论】:

    • 我应该如何突出显示选定的视图?当涉及到活动时,默认情况下应该选择回收器视图中的第一项......
    • 您可以使用 view.setSelected(true) 选择任何视图;功能。您应该将该视图的背景设置为 android:background="?android:attr/selectableItemBackground"
    • 但是我应该如何更改之前点击的项目中的选择??
    • 您可以保留每个选定项目的引用,当用户选择其他项目时,您可以使用该引用更改之前选择的项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多