0

私はAndroidアプリを書いていますが、で行の位置を取得するのに問題がありListViewますCheckBox

エミュレータのスクリーンショットは次のとおりです。 https://dl.dropbox.com/u/24223262/help.png

私はすでにListViewCheckBoxesで作成しました。しかし、チェックされた各エントリの行の位置を見つける方法がわかりません。チェックされた位置を取得したら、[選択を削除]アクションを実装します。

助けてください!

これが私のコードです:

public class ListTest extends ListActivity implements OnCheckedChangeListener {
    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        //--- Importing StringsArray---     
        Bundle gotBasketScanner = getIntent().getExtras();
        String[] StringArrayHistory = gotBasketScanner.getStringArray("fromHistory");

        // ---Make Adapter---
        setListAdapter( new ArrayAdapter<String>(ListTest.this,
                    android.R.layout.simple_list_item_multiple_choice,
                    StringArrayHistory));

        // ---Put Array into a ListView and add Checkboxes to Listview
        ListView list = getListView();
        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    }
}
4

4 に答える 4

1

...onItemClick()の代わりに使用します。onCheckedChangeListener

getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {
         Toast.makeText(getApplicationContext(), "Item "+position+" is clicked",
                              Toast.LENGTH_SHORT).show();
    }
}

これは、クリックされた位置と ID を取得するためのより良い方法です。

これで問題が解決することを願っています。

編集

次の行を更新しました:-

getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {

今あなたのコードを試してみてください。

于 2012-06-29T04:57:07.590 に答える
0

PrefrenceScreenCheckBoxPreferenceと一緒に使用すると、より簡単でスケーラブルな実装が可能になります

于 2012-06-29T05:00:54.340 に答える
0

CheckedTextView を使用して同じものを実装できます。

main.xml

  <?xml version="1.0" encoding="utf-8"?>
  <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:clickable="true"
    android:focusable="true"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple">
  </CheckedTextView>

addlist.xml

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

  <ListView
     android:id="@+id/mainListView"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     >
  </ListView>

  <Button android:id="@+id/click"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Click"/>
 </LinearLayout>

そして、これがGetCheckedTextPositionActivityアクティビティです。ボタンをクリックすると、listitem の位置がチェックされます。

 public class GetCheckedTextPositionActivity extends Activity {

private ListView myList;
private EfficientAdapter myAdapter;
private ArrayList<String> data;
private LayoutInflater mInflater;
private Button click;
private ArrayList<Integer> positions;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addlist);

    positions = new ArrayList<Integer>();

    data = new ArrayList<String>();
    data.add("Bangalore");
    data.add("Delhi");
    data.add("Patna");
    data.add("Mumbai");

    click = (Button)findViewById(R.id.click);
    mInflater = LayoutInflater.from(getApplicationContext());
    myList = (ListView) findViewById(R.id.mainListView);
    myAdapter = new EfficientAdapter(data, getApplicationContext());
    myList.setAdapter(myAdapter);

    click.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if(positions.size() != 0){
                for(Integer pos : positions){
                Log.e("Positions checked :"," Positions :"+pos);
                }
            }

        }
    });

}

public class EfficientAdapter extends BaseAdapter {
    private ArrayList<String> myData;

    public EfficientAdapter(ArrayList<String> mData, Context ctx) {
        // TODO Auto-generated constructor stub
        this.myData = mData;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return myData.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return myData.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final int currentPos = position;

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.main, null);
        }

        ((CheckedTextView) convertView).setText(myData.get(position));
        ((CheckedTextView) convertView).setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        ((CheckedTextView) v).toggle();
                        if(((CheckedTextView) v).isChecked()){
                            positions.add(currentPos);
                        }
                    }
                });
        return convertView;
    }

}
 }

お役に立てれば。

于 2012-06-29T05:54:31.303 に答える