81

onClickの項目で使用するボタンのイベントを追加したいListviewonClickリストアイテムのボタンにイベントを与えるにはどうすればよいですか。

4

10 に答える 10

98

アダプター クラス内

public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = getLayoutInflater();
    View row = inflater.inflate(R.layout.vehicals_details_row, parent, false);
    Button deleteImageView = (Button) row.findViewById(R.id.DeleteImageView);
    deleteImageView.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            //...
        }
    });
}

しかし、listView の行がクリックできないという問題が発生する可能性があります。解決:

  • ListView をフォーカス可能にするandroid:focusable="true"
  • フォーカスできないボタン android:focusable="false"
于 2012-09-26T07:10:59.420 に答える
67

onClickカスタム アダプターのgetViewメソッドでイベントを設定できます。
リンクhttp://androidforbeginners.blogspot.it/2010/03/clicking-buttons-in-listview-row.htmlを確認してください。

于 2012-09-26T07:00:15.160 に答える
13

これを試して、

public View getView(final int position, View convertView,ViewGroup parent) 
{
   if(convertView == null)
   {
        LayoutInflater inflater = getLayoutInflater();
        convertView  = (LinearLayout)inflater.inflate(R.layout.YOUR_LAYOUT, null);
   }

   Button Button1= (Button)  convertView  .findViewById(R.id.BUTTON1_ID);

   Button1.setOnClickListener(new OnClickListener() 
   { 
       @Override
       public void onClick(View v) 
       {
           // Your code that you want to execute on this button click
       }

   });


   return convertView ;
}

それはあなたを助けるかもしれません....

于 2012-09-26T07:51:04.647 に答える
4

getView メソッド内のカスタム アダプター:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do things Here 
    }
});
于 2012-09-26T07:04:26.973 に答える
2

これは多くの投稿で議論されていますが、それでも解決策を見つけることができませんでした:

android:focusable="false"
android:focusableInTouchMode="false"
android:focusableInTouchMode="false"

以下のソリューションは、ボタン、ImageButtons、ImageView、Textview のいずれかの UI コンポーネントで機能します。LinearLayout、RelativeLayout はリストビュー セル内をクリックし、onItemClick にも応答します。

アダプタ クラス - getview():

    @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = convertView;
            if (view == null) {
                view = lInflater.inflate(R.layout.my_ref_row, parent, false);
            }
            final Organization currentOrg = organizationlist.get(position).getOrganization();

            TextView name = (TextView) view.findViewById(R.id.name);
            Button btn = (Button) view.findViewById(R.id.btn_check);
            btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    context.doSelection(currentOrg);

                }
            });

       if(currentOrg.isSelected()){
            btn.setBackgroundResource(R.drawable.sub_search_tick);
        }else{
            btn.setBackgroundResource(R.drawable.sub_search_tick_box);
        }

    }

これで、ボタンクリックオブジェクトをアクティビティに取得できます。(特に、ボタンを選択状態と非選択状態のチェックボックスとして機能させたい場合):

    public void doSelection(Organization currentOrg) {
        Log.e("Btn clicked ", currentOrg.getOrgName());
        if (currentOrg.isSelected() == false) {
            currentOrg.setSelected(true);
        } else {
            currentOrg.setSelected(false);
        }
        adapter.notifyDataSetChanged();

    }
于 2015-07-22T06:46:06.773 に答える
1

ListView のカスタム アダプターを定義したと仮定します。

この場合onClickListener、カスタム アダプターのgetView()メソッド内でボタンを割り当てることができます。

于 2012-09-26T07:01:31.387 に答える
0

getviewメソッドでは、リスナーをビューのチェックの外に置きます..これに従うようにしてください..私の場合はうまくいきました..リストビューの各行のedittextの値を増減するにはどうすればよいですか?

于 2015-08-28T07:56:54.767 に答える
0

私は見つける

final Button yourButton = (Button)view.findViewById(R.id.your_button);
yourButton.setFocusable(false);
yourButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        ...///);

問題を解決できます。ボタンをクリックしたときに何らかのデータを取得したい場合は、タグを使用すると便利です。ここでは、ボタンは内部クラス内で使用されるため、final として宣言されています。

于 2018-03-29T12:13:24.200 に答える