如何在使用BaseAdapter生成的Listview中一次只更改一个Button的颜色?

时间:2014-05-15 00:26:20

标签: android listview baseadapter getview

我使用Listview生成了BaseAdapter。目前我的Listview中有4行。我在行中有一些Textviews和一个按钮。目前我的按钮的颜色是默认的灰色。我想做以下事情:

  1. 当我点击第一行的按钮时,我想将按钮的颜色更改为黑色。
  2. 当我点击第二行时,我希望第一行中的按钮更改回灰色,并将第二行中按钮的颜色更改为黑色。
  3. 简而言之,我想只需要一个按钮,一次点击就会出现黑色。我已经完成了以下代码,但是我遇到了以下问题。

    1. 如果我点击第一行按钮,第三行按钮会变成黑色。
    2. 如果我点击第二行按钮,它会变黑,但之前点击的按钮不会恢复原来的颜色。
    3. 我发布了我的代码,请一步一步指导我,因为我对此很陌生。

      mycontactstemp.java

      public class contactstemp extends Fragment {
       public ArrayList<ProductModel> _productlist = new ArrayList<ProductModel>();
          @Override
           public View onCreateView(final LayoutInflater inflater, ViewGroup container,
              Bundle savedInstanceState) {
           final View view = inflater.inflate(R.layout.viewrecord, container,
                  false);
                return view;
      }
          private class ListAdapter extends BaseAdapter {
          LayoutInflater inflater;
          ViewHolder viewHolder;
      
          public ListAdapter(Context context) {
              // TODO Auto-generated constructor stub
              inflater = LayoutInflater.from(context);
          }
      
          @Override
          public int getCount() {
              // TODO Auto-generated method stub
              return _productlist.size();
          }
      
          @Override
          public Object getItem(int position) {
              // TODO Auto-generated method stub
              return _productlist.get(position);
          }
      
          @Override
          public long getItemId(int position) {
              // TODO Auto-generated method stub
              return position;
          }
      
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
              // TODO Auto-generated method stub
              if (convertView == null) {
                  convertView = inflater.inflate(R.layout.listview_row, null);
                  viewHolder = new ViewHolder();
                  viewHolder.txt_pname = (TextView) convertView
                  .findViewById(R.id.txtdisplaypname);
          viewHolder.txt_pprice = (TextView) convertView
                  .findViewById(R.id.txtdisplaypprice);
      
          viewHolder.txtidno = (TextView) convertView
                  .findViewById(R.id.txtdisplaypid);
          viewHolder.buttons = (Button) convertView
          .findViewById(R.id.btn_update);
          convertView.setTag(viewHolder);
      
      
              }
              else {
                  viewHolder = (ViewHolder) convertView.getTag();
              }
              viewHolder.txt_pname.setText(_productlist.get(position)
                      .getProductname().trim());
              viewHolder.txt_pprice.setText(_productlist.get(position)
                      .getProductprice().trim());
      
              viewHolder.txtidno.setText(_productlist.get(position).getIdno()
                      .trim());
              viewHolder.buttons.setOnClickListener(new OnClickListener() {
      
                  @Override
                  public void onClick(View v) {
                      // TODO Auto-generated method stub
                      viewHolder.buttons.setBackgroundColor(Color.BLACK);
                  }
              });
              return  convertView;
          }
      

1 个答案:

答案 0 :(得分:1)

您可以利用列表视图中的单项选择模式(请参阅setChoiceMode())。

为按钮创建新的可绘制背景,并将所选状态设置为黑色。然后将您的按钮设置为android:duplicateParentState =“true”,以便从列表项中获取选择。