3

リストビューに各項目の名前とチェックボックスの両方を入力するためのカスタムアダプターがあります。リストの上にボタンを追加して、すべてのアイテムを選択できるようにしましたが、どういうわけか機能していません。どこが間違っているのかわかりません。どちらもエラーをスローしていません。これが私のコードです。`

send_show12.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View view) {
    //              flag = !flag;
                    //lv = get
                    int size = lv.getCount();
                    `Log.d("This is count is at button listener", ""+size);

                    if(lv.isItemChecked(1)){
                        for(int i = 0; i<=size; i++){

                            lv.setItemChecked(i, true);
                        }
                    } else {
                        for(int i = 0; i<=size; i++){
                            lv.setItemChecked(i, false);
                        }
                    }
                }
            });`

助けていただければ幸いです。ありがとう

4

3 に答える 3

3

チェックボックス付きのリストビューをスクロールすると、アイテムの位置が変更され、チェックされたアイテムがオフになり、チェックされていないアイテムがチェックされるようになります。そのため、選択したリストアイテムが正しく表示されないのはなぜですか(この問題を確認しましたか??)。この問題では、baseAdapterの代わりにArrayAdapterを使用する必要があります。 この問題を解決するには、このリンクをたどってください。

PlanetsActivityクラスの代わりに、このクラスを使用します。残りは同じです...

public class PlanetsActivity extends Activity {

private ListView mainListView;
//private Planet[] planets;
ArrayList<Planet> planets=new ArrayList<Planet>();
private ArrayAdapter<Planet> listAdapter;

/** Called when the activity is first created. */
@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Find the ListView resource.
    mainListView = (ListView) findViewById(R.id.listView1);

    // When item is tapped, toggle checked properties of CheckBox and
    // Planet.

    mainListView
            .setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View item,
                        int position, long id) {
                    Planet planet = listAdapter.getItem(position);
                    planet.toggleChecked();
                    PlanetViewHolder viewHolder = (PlanetViewHolder) item
                            .getTag();
                    viewHolder.getCheckBox().setChecked(planet.isChecked());
                }
            });

    Button bt=(Button)findViewById(R.id.yourbutton);
    bt.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            planets.clear();
            for(int i=1;i<15;i++){
                planets.add(new Planet(""+i,true));
            }

            listAdapter = new PlanetArrayAdapter(this, planets);
            mainListView.setAdapter(listAdapter);
        }
    });

    planets.add(new Planet("1", false));
    planets.add(new Planet("2", false));
    planets.add(new Planet("3", false));
    planets.add(new Planet("4", false));
    planets.add(new Planet("5", false));
    planets.add(new Planet("6", false));
    planets.add(new Planet("7", false));
    planets.add(new Planet("8", false));
    planets.add(new Planet("9", false));
    planets.add(new Planet("10", false));
    planets.add(new Planet("11", false));
    planets.add(new Planet("12", false));
    planets.add(new Planet("13", false));
    planets.add(new Planet("14", false));


    listAdapter = new PlanetArrayAdapter(this, planets);
    mainListView.setAdapter(listAdapter);
}

public Object onRetainNonConfigurationInstance() {
    return planets;
}}  
于 2013-03-08T09:09:21.020 に答える
0

アイテムを表すビューを確認しようとしています。チェックボックスとテキストがあるとおっしゃっていたので、LinearLayoutだと思います。LinearLayoutはCheckableを実装していないため、チェックできません。

Checkableを実装するLiearLayoutのサブクラスを実装するか(これは面白くなく、私が見たWeb上のほとんどの無料ソリューションは、設計上壊れているか、すべての状況で機能しないように不完全です)、またはループ内のLinearLayout内のチェックボックス。

于 2013-03-08T08:26:27.747 に答える