【问题标题】:android listview with checkbox带有复选框的android列表视图
【发布时间】:2012-02-20 07:07:17
【问题描述】:

我有一个列表视图,每一行都有一个复选框、图像视图和文本视图

我的要求是 1. 可以选中和取消选中复选框,并且对于每行的每次单击复选框执行功能1:我可以通过为 baseadapter 的 getview 中的复选框定义一个 onitem clicklistenr 来做到这一点

  1. 如果单击复选框以外的任何其他项目,我想将其解释为行单击并执行功能 2。目前我为 textview 定义了一个 onitemclick 侦听器,它可以工作

所以我的问题是,正确的做法是,为所有其他项目定义 onitemclick 侦听器并使其调用函数 2 ?

或者有没有一种方法可以为我的列表实现行选择。 请在下面查看我的代码。如果需要,我可以提供更多详细信息

list.java

public class ScanListActivity extends BaseActivity {
static Button scanlist;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.scan_list);
    List<ScannedProduct> productList = new ArrayList<ScannedProduct>();
    productList = getProductList();
    final ListView lv = (ListView) findViewById(R.id.list);
    scanlist = (Button) findViewById(R.id.addtowishlist);
    scanlist.setEnabled(false);
    lv.setAdapter(new ProductListAdapter(this, productList, scanlist));
}

适配器;getview

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    final int pos = position;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.product_list_row, null);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView.findViewById(R.id.productid);
        holder.text1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Log.i("List",""+pos);

            }
        });
        holder.text2 = (TextView) convertView.findViewById(R.id.price);
        holder.image = (ImageView) convertView
                .findViewById(R.id.productimageid);
        convertView.setTag(holder);
    } else {

        holder = (ViewHolder) convertView.getTag();
    }

    holder.text1.setText(productList.get(position).getTitle());
    holder.text2.setText(productList.get(position).getPrice().toString());
    if(productList.get(position).getSmallImage() != null){
    byte [] bb= (productList.get(position).getSmallImage());
    holder.image.setImageBitmap(BitmapFactory.decodeByteArray(bb, 0, bb.length));
    }
    else{
        holder.image.setImageBitmap(null);
        holder.image.setBackgroundResource(R.drawable.highlight_disabled);
    }



//  holder.image.setImageBitmap(Utils.loadBitmap(productList.get(position).getSmallImage()));
    final CheckBox check = (CheckBox) convertView
            .findViewById(R.id.checkbox);
    check.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (check.isChecked()) {

                ProductListAdapter.count++;
            } else {
                ProductListAdapter.count--;
            }
            if (ProductListAdapter.count == 0) {
                //showOrHideButton.setClickable(false);
                //showOrHideButton.setVisibility(View.GONE);
                showOrHideButton.setEnabled(false);
            } else {
                //showOrHideButton.setVisibility(View.VISIBLE);
                showOrHideButton.setEnabled(true);
            }

        }
    });
    return convertView;
}

static class ViewHolder {
    TextView text1;
    ImageView image;
    TextView text2;
}

【问题讨论】:

    标签: android listview checkbox


    【解决方案1】:

    有两种选择:

    • 正如你所做的那样:为每个视图定义一个 OnClickListener。但请注意,所有项目都可以共享同一个侦听器(因此声明为字段而不是像您所做的那样内联),这将使用更少的内存。

    • 使用OnItemClickListener

    第二个更实用,但我记得使用它有一个限制,但不记得它是什么。我个人使用第一种策略。

    【讨论】:

    • 如果我没记错的话,列表视图中的复选框会影响一些聚焦问题。该复选框在选中后会窃取焦点并防止点击列表项...
    • 有没有办法获得点击行的位置。我的 onclick 函数是: Intent intent = new Intent(parentActivity, SearchResultActivity.class);因此,如果我将其定义为成员,我需要一种方法来获取单击的行的位置 intent.putExtra("barcode", productList.get(pos).getBarcode()); intent.putExtra("格式", productList.get(pos).getFormat()); Log.i("", "" + productList.get(pos).getBarcode()); parentActivity.startActivity(intent); Log.i("", "" + pos);
    • 所以如果我将函数定义为 memeber ,我需要一种方法来获取每次点击的位置
    • 重新格式化我的评论:有没有办法获得点击行的位置。我的 onclick 函数是: Intent intent = new Intent(parentActivity, SearchResultActivity.class); intent.putExtra("条形码", productList.get(pos).getBarcode()); intent.putExtra("格式", productList.get(pos).getFormat()); Log.i("", "" + productList.get(pos).getBarcode()); parentActivity.startActivity(intent);所以如果我将函数定义为 memeber ,我需要一种方法来获取每次点击的位置
    • 要么你的行视图应该有信息,要么为此使用 ItemClickListener。
    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    相关资源
    最近更新 更多