0

チェックボックスのリストが表示されるリストビューがあります。ボタンを押すと、リストビューでユーザーが選択されている各項目に対して sth を実行するボタンを追加したいです。どのチェックボックスがチェックされているかを見つける最良の方法は何ですか?使用できることはわかってsetOnCheckedChangeListenerいますが、リスト内のチェックボックスごとに if を呼び出す方法は?また、配列文字列を作成し、チェックボックスをオンにするたびにそのテキストを配列リストに追加すると、選択した項目ごとにループを実行できますか? リストビューを作成するための私のコードは次のとおりです

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_database_list);
    File path=new File(ClubCP.SDcardPath);
    List<String> file_lists =   main.directoryPath(path);
    ListView Database_list=(ListView)findViewById(R.id.database_list);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.database_list_item,R.id.chk_database_list_item,file_lists);
    ArrayAdapter<String> adapter1 = new InteractiveArrayAdapter(this,file_lists);
    Database_list.setAdapter(adapter1);

}

検索したところ、ArrayAdapter を使用する必要があると思います..そのクラスを作成しています..これは私のクラス パッケージ co.tosca.persianpoem です。

import java.util.List;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;

public class InteractiveArrayAdapter extends ArrayAdapter<String> {

      private final List<String> list;
      private final Activity context;

      public InteractiveArrayAdapter(Activity context, List<String> list) {
        super(context, R.layout.database_list_item, list);
        this.context = context;
        this.list = list;
      }

      static class ViewHolder {
        protected CheckBox checkbox;
      }

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
          LayoutInflater inflator = context.getLayoutInflater();
          view = inflator.inflate(R.layout.database_list_item, null);
          final ViewHolder viewHolder = new ViewHolder();
          viewHolder.checkbox = (CheckBox) view.findViewById(R.id.chk_database_list_item);
          viewHolder.checkbox
              .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                  ///do sth

                }
              });
          view.setTag(viewHolder);
          viewHolder.checkbox.setTag(list.get(position));
        } else {
          view = convertView;
          ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
        }


        return view;
      }
    } 

ご協力いただきありがとうございます

4

1 に答える 1

1

ビューごとにgetView呼び出すことができるように、ArrayAdapter をサブクラス化し、メソッドをオーバーライドする必要があります。setOnClickListenerArrayAdapter のドキュメントを参照してください:こちら

public View getView (int position, View convertView, ViewGroup parent) {
    View itemView = convertView;
    if (itemView == null) {
        LayoutInflater li = LayoutInflater.from(getContext());
        itemView = li.inflate(R.layout.database_list_item);
    }

    CheckBox cb = (CheckBox)itemView.findViewById(R.id.checkbox); // whatever the id of checkbox is in layout
    cb.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CheckBox myCb = (CheckBox)v;
            if (myCb.isChecked()) {
                // add position to array representing selected items
            } else {
                // remove position from array
            }
        }
    });

    return itemView;
}
于 2013-04-09T06:06:59.807 に答える