3

ListViewリスト内のすべての要素にTextViewと2つの異なるボタンが含まれています。このようなもの:

ListView
--------------------
[ImageView][Text][CheckBox][Button]
--------------------
[ImageView][Text][CheckBox][Button]
--------------------
... (and so on) ...

このコードを使用しOnItemClickListenerて、アイテム全体のを作成できます。

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> list, View view, int position, long id) {
        Log.i(TAG, "onListItemClick: " + position);

        }

    }
});

ただし、アイテム全体をクリック可能にするのではなく、各リスト要素のチェックボックスとボタンのみをクリック可能にします。

だから私の質問は、次のパラメータを使用してこれら2つのボタンにonClickListenerを実装するにはどうすればよいですか?

  • int id(リスト内の各アイテムに関連付けられているID)
  • int position(これは、ボタンのクリックが発生したリスト内の要素です)
4

7 に答える 7

1

これを実現するには、baseAdpterを作成する必要があります

public class ContactsAdapter extends BaseAdapter {

    ArrayList<ContactInfo> mlist;
    Context mcontext;


public BluetoothChatadpter(Context context,ArrayList<ChatInfo> mchtlist) {      
        mlist =  mchtlist;
        mcontext = context;

    }

    @Override
    public int getCount() {
        return mlist.size();
    }

    @Override
    public Object getItem(int postion) {
        return mlist.get(postion);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
        public View getView(int position, View convertview, ViewGroup viewgroup){
            View view = null;
            if(convertview == null){
                LayoutInflater inflater = context.getLayoutInflater();
                view = inflater.inflate(R.layout.contactrow, null);

                ContactHolder holder = new ContactHolder();

                holder.txtviewfirstname = (TextView)view.findViewById(R.id.firstname);
                holder.txtviewphone = (TextView)view.findViewById(R.id.phone);
                holder.chkselected = (CheckBox)view.findViewById(R.id.check);

                setOnClickListener(new OnClickListener() {
        @Override
            public void onClick(View arg0) {
            // to open the selected file in resp

                  // do your work here
                 }});


    chkselected .setOnClickListener(new OnClickListener() {
        @Override
    public void onClick(View v) {
    // Toast.makeText(context,// "checked is clicke="+pos, 12).show();
            if (chkselected.isChecked())          
                       {            

                        // do your work here
            } else {

     // do your work here                               
            }
        }
});



            view.setTag(holder);

        }
            else{
                view = convertview;
            }
            ContactHolder holder2 = (ContactHolder) view.getTag();
            holder2.txtviewfirstname.setText(list.get(position).firstname);
            holder2.txtviewphone.setText(list.get(position).phonenumber);
            holder2.chkselected.setChecked(list.get(position).selected);
            return view;
        }

}
于 2012-09-04T12:50:40.163 に答える
1

私はこの方法で同じ問題を解決しました:ListViewItemのlayout.xmlで、要素にOnClickListenerを追加するタグを付けます。

       android:id="@+id/CheckBox"
       android:tag="CheckBox" />

...。

       android:id="@+id/Button"
       android:tag="Button" />

ListViewが拡張されているコードで、次のコードを使用してOnClickListenerを追加します。

       listView.findViewWithTag("CheckBox").setOnClickListener(createCheckBoxOnClickListener(act));
       listView.findViewWithTag("Button").setOnClickListener(createButtonOnClickListener(act));
于 2014-01-01T23:39:52.350 に答える
0

AdapterのgetView()メソッドにリスナーを追加できます。

于 2012-09-04T12:50:57.260 に答える
0

getViewこれは、アダプタのメソッドで行う必要があります。

于 2012-09-04T12:49:24.253 に答える
0

簡単です。これらの2つのボタンにを実装するだけOnClickListenerで、取得した位置を取得できます。配置するには、位置をにgetView()設定してください。finalOnClickListener

于 2012-09-04T12:50:27.747 に答える
0

リストビューにonItemClickListenerを追加するのではなく、必要なボタンにonClickを追加し、チェックボックスに次のようにします。

 CheckBox cbox = new CheckBox(this);// find your checkbox from the view here.
        cbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if(isChecked){ // do what ever you want. } } });
于 2012-09-04T12:54:39.097 に答える
0

以下のコードを確認してください。

private class ListViewAdapter extends BaseAdapter {

        private LayoutInflater mInflater;

        public ListViewAdapter(Context con) {
            // TODO Auto-generated constructor stub
            mInflater = LayoutInflater.from(con);
        }

        public int getCount() {
            // TODO Auto-generated method stub
            return main_genral_class.review_name.size();
        }

        public Object getItem(int position) {
            // TODO Auto-generated method stub

            return position;
        }

        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ListContent holder;

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.review_row, null);
                holder = new ListContent();

                holder.img = (ImageView) convertView
                        .findViewById(R.id.imageView1);
                holder.name = (TextView) convertView
                        .findViewById(R.id.textView1);
                holder.check_date = (TextView) convertView
                        .findViewById(R.id.textView2);




                holder.img.setOnClickListener(mOnTitleClickListener);
                holder.name.setOnClickListener(mOnTitleClickListener1);
                holder.check_date.setOnClickListener(mOnTitleClickListener2);


                convertView.setTag(holder);
            } else {

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

            holder.text2.setText(main_genral_class.review_shout.get(position));
            return convertView;
        }
    }

private OnClickListener mOnTitleClickListener = new OnClickListener() {
        public void onClick(View v) {
            final int position = mListView.getPositionForView((View) v
                    .getParent());

                Toast.makeText(review_activity.this, "click on Image View",
                        Toast.LENGTH_SHORT).show();

        }
    };

private OnClickListener mOnTitleClickListener1 = new OnClickListener() {
            public void onClick(View v) {
                final int position = mListView.getPositionForView((View) v
                        .getParent());

                    Toast.makeText(review_activity.this, "click on Text View",
                            Toast.LENGTH_SHORT).show();

            }
        };

private OnClickListener mOnTitleClickListener2 = new OnClickListener() {
            public void onClick(View v) {
                final int position = mListView.getPositionForView((View) v
                        .getParent());

                    Toast.makeText(review_activity.this, "click on Date Text View",
                            Toast.LENGTH_SHORT).show();

            }
        };
于 2012-09-04T13:11:24.387 に答える