просмотр списка Android с флажком - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть список с каждой строкой, имеющей флажок, изображение и вид текста

мои требования 1. флажок может быть отмечен и снят, и для каждого щелчка на флажок для каждой строки выполните функцию 1: Это я могсделать, определив onitem clicklistenr для флажка в getview baseadapter

  1. Если выбран какой-либо другой элемент, кроме флажка, я хочу интерпретировать это как щелчок строки и выполнить функцию 2. В настоящее время яопределили прослушиватель onitemclick для textview, и он работает

Поэтому мой вопрос заключается в том, чтобы правильно сделать это, определить прослушиватель 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;
}

1 Ответ

1 голос
/ 20 февраля 2012

Есть 2 варианта:

  • , как вы делаете: определите OnClickListener для каждого представления.Но затем обратите внимание, что все элементы могут совместно использовать один и тот же прослушиватель (таким образом, объявленный как поле, а не встроенный, как вы сделали), это потребует меньше памяти.

  • использование OnItemClickListener

Второй вариант более практичен, но я помню, что есть ограничение, но я не могу вспомнить, что это было.Я лично использую первую стратегию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...