Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在回收视图中获取按钮状态_Java_Android_Xml_Listview_Android Recyclerview - Fatal编程技术网

Java 在回收视图中获取按钮状态

Java 在回收视图中获取按钮状态,java,android,xml,listview,android-recyclerview,Java,Android,Xml,Listview,Android Recyclerview,我使用的是回收视图,我试图在选中状态下只设置一次按钮 button 1 : when clicked set is as true . button2 : when clicked set `button 1` to `false` state and then set `button 2` to `true` button3: when clicked set `button 2` to `false` state and then set `button 3` to `true` 我的问题

我使用的是
回收视图
,我试图在选中状态下只设置一次
按钮

button 1 : when clicked set is as true .
button2 : when clicked set `button 1` to `false` state and then set `button 2` to `true`
button3: when clicked set `button 2` to `false` state and then set `button 3` to `true`
我的问题是如何让上一个按钮视图将其设置为false

public class MyCustomAdapterPackages extends RecyclerView.Adapter<MyCustomAdapterPackages.CustomViewHolderPackages> {


    private ArrayList<Packages> packages;
    private Context mContext;
int id=-1;
    public MyCustomAdapterPackages(Context context, ArrayList<Packages> packages) {
            this.packages = packages;
            this.mContext = context;

    }

    @Override
    public CustomViewHolderPackages onCreateViewHolder(ViewGroup viewGroup, int i) {
             View view = LayoutInflater.from(mContext).inflate(R.layout.package_row_item, null);
            CustomViewHolderPackages viewHolder = new CustomViewHolderPackages(view);
            return viewHolder;
    }

    @Override
    public void onBindViewHolder(final MyCustomAdapterPackages.CustomViewHolderPackages holder, final int position) {

            final Packages pa = packages.get(position);



            holder.PackageButton.setText(pa.getPackageName());
        holder.PackagePrice.setText(String.valueOf(pa.getPackagePrice()));
            holder.PackageButton.setBackground(ContextCompat.getDrawable(mContext, R.drawable.tab_bg_selector));


        holder.PackageButton.setId(position);
        holder.PackageButton.setTag(id);


            View.OnClickListener clickListener = new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {




                        if(id<0){
                            view.setSelected(true);
                            id=view.getId();
                        }
                        else{

                           if(((Button)holder.getTag(id)).isSelected()) {
                               view.findViewById(id).setSelected(false);
                               view.setSelected(true);
                               id=view.getId();
                           }
                            else{
                              id=view.getId();
                               view.setSelected(true);
                           }

                        }


                    }
            };

            //Handle click event on both title and image click
            holder.PackageButton.setOnClickListener(clickListener);
           // holder.PackagePrice.setOnClickListener(clickListener);

            holder.PackageButton.setTag(packages.get(position));
         //   holder.PackagePrice.setTag(packages.get(position));
     //   holder.viewGroup.addView(ll);
    }


    @Override
    public int getItemCount() {
            return (null != packages ? packages.size() : 0);
    }

    public class CustomViewHolderPackages extends RecyclerView.ViewHolder {


            protected Button PackageButton;
            protected TextView PackagePrice;

            public CustomViewHolderPackages(View view) {
                    super(view);
                    this.PackageButton = (Button) view.findViewById(R.id.PackageButton);
                    this.PackagePrice = (TextView) view.findViewById(R.id.PackagePrice);

            }

    }
我找到了解决办法

我应该首先将循环视图实例从外部类传递到我的自定义适配器

薄内循环视图适配器,我可以得到它的位置在循环视图中的任何视图,并将其转换到视图持有人,然后可以做任何事情的持有人

以下是代码:

户外类:

        mRecyclerView2 = (RecyclerView) findViewById(R.id.list_Fragment);
    mRecyclerView2.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView2.setLayoutManager(mLayoutManager);
    mAdapter2 = new MyCustomAdapterPackages(this, PackagesList,mRecyclerView2);
    mRecyclerView2.setAdapter(mAdapter2);
    mAdapter2.notifyDataSetChanged();
在custome适配器类中:

@Override
    public void onBindViewHolder(final MyCustomAdapterPackages.CustomViewHolderPackages holder, final int position) {

            final Packages pa = packages.get(position);



            holder.PackageButton.setText(pa.getPackageName());
        holder.PackagePrice.setText(String.valueOf(pa.getPackagePrice()));
            holder.PackageButton.setBackground(ContextCompat.getDrawable(mContext, R.drawable.tab_bg_selector));


        holder.PackageButton.setId(position);
        holder.PackageButton.setTag(id);


            View.OnClickListener clickListener = new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {



                        if(id<0){ // first time or default 
                            view.setSelected(true);
                            id=view.getId(); 
                        }
                        else{
                            CustomViewHolderPackages row = (CustomViewHolderPackages)mRecyclerView.findViewHolderForAdapterPosition(id); 

                           if( row.PackageButton.isSelected()) {
                               row.PackageButton.setSelected(false); // previous view 
                               view.setSelected(true); // current view
                               id=view.getId();
                           }
                            else{
                              id=view.getId();
                               view.setSelected(true);
                           }

                        }


                    }
            };

            //Handle click event
            holder.PackageButton.setOnClickListener(clickListener);

    } 
@覆盖
BindViewHolder上的公共无效(最终MyCustomAdapterPackages.CustomViewHolderPackages持有人,最终int位置){
最终包pa=包get(位置);
holder.PackageButton.setText(pa.getPackageName());
holder.PackagePrice.setText(String.valueOf(pa.getPackagePrice());
holder.PackageButton.setBackground(ContextCompat.getDrawable(mContext,R.drawable.tab_bg_选择器));
支架.包装按钮.设置ID(位置);
支架.PackageButton.setTag(id);
View.OnClickListener clickListener=新建视图。OnClickListener(){
@凌驾
公共void onClick(视图){
如果(id我找到了解决方案

我应该首先将循环视图实例从外部类传递到我的自定义适配器

薄内循环视图适配器,我可以得到它的位置在循环视图中的任何视图,并将其转换到视图持有人,然后可以做任何事情的持有人

以下是代码:

户外类:

        mRecyclerView2 = (RecyclerView) findViewById(R.id.list_Fragment);
    mRecyclerView2.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView2.setLayoutManager(mLayoutManager);
    mAdapter2 = new MyCustomAdapterPackages(this, PackagesList,mRecyclerView2);
    mRecyclerView2.setAdapter(mAdapter2);
    mAdapter2.notifyDataSetChanged();
在custome适配器类中:

@Override
    public void onBindViewHolder(final MyCustomAdapterPackages.CustomViewHolderPackages holder, final int position) {

            final Packages pa = packages.get(position);



            holder.PackageButton.setText(pa.getPackageName());
        holder.PackagePrice.setText(String.valueOf(pa.getPackagePrice()));
            holder.PackageButton.setBackground(ContextCompat.getDrawable(mContext, R.drawable.tab_bg_selector));


        holder.PackageButton.setId(position);
        holder.PackageButton.setTag(id);


            View.OnClickListener clickListener = new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {



                        if(id<0){ // first time or default 
                            view.setSelected(true);
                            id=view.getId(); 
                        }
                        else{
                            CustomViewHolderPackages row = (CustomViewHolderPackages)mRecyclerView.findViewHolderForAdapterPosition(id); 

                           if( row.PackageButton.isSelected()) {
                               row.PackageButton.setSelected(false); // previous view 
                               view.setSelected(true); // current view
                               id=view.getId();
                           }
                            else{
                              id=view.getId();
                               view.setSelected(true);
                           }

                        }


                    }
            };

            //Handle click event
            holder.PackageButton.setOnClickListener(clickListener);

    } 
@覆盖
BindViewHolder上的公共无效(最终MyCustomAdapterPackages.CustomViewHolderPackages持有人,最终int位置){
最终包pa=包get(位置);
holder.PackageButton.setText(pa.getPackageName());
holder.PackagePrice.setText(String.valueOf(pa.getPackagePrice());
holder.PackageButton.setBackground(ContextCompat.getDrawable(mContext,R.drawable.tab_bg_选择器));
支架.包装按钮.设置ID(位置);
支架.PackageButton.setTag(id);
View.OnClickListener clickListener=新建视图。OnClickListener(){
@凌驾
公共void onClick(视图){

如果(id)您可以添加id字段吗?您在哪里设置clickListener到按钮?发布回收服务的完整代码我已经更新了帖子您可以添加id字段吗?您在哪里设置clickListener到按钮?发布回收服务的完整代码我已经更新了帖子