2016-02-12 47 views
1

我正在使用Recycle view,并且我试图仅在选定状态上设置button一次。在回收视图中获取按钮状态

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); 

      } 

    } 

}

登录错误:

Process: hesham.bestdealsoft.topline.elitedishes, PID: 15922 
                        java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.View.isSelected()' on a null object reference 
                         at hesham.bestdealsoft.topline.elitedishes.MyCustomAdapterPackages$1.onClick(MyCustomAdapterPackages.java:75) 
                         at android.view.View.performClick(View.java:4848) 
                         at android.view.View$PerformClick.run(View.java:20262) 
                         at android.os.Handler.handleCallback(Handler.java:815) 
                         at android.os.Handler.dispatchMessage(Handler.java:104) 
                         at android.os.Looper.loop(Looper.java:194) 
                         at android.app.ActivityThread.main(ActivityThread.java:5637) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:372) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) 
+0

你可以添加id字段吗? –

+0

id字段是= -1; –

+0

你在哪里设置clickListener为按钮?发布完整代码recyclerview –

回答

0

我发现溶液

我应该从外部类通过再循环视图实例到我的定制适配器第一

薄内部回收视图适配器我可以通过它在recycle中的位置获取任何视图vie w和投它来查看持有人,然后可以做任何事情与支架

这里是代码:

出端类:

 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); 

    }