выберите весь метод, чтобы выбрать все флажки в списке, Android не работает

У меня есть собственный адаптер для заполнения списка с именами и флажками для каждого элемента. Теперь я добавил кнопку в верхней части списка, чтобы выбрать все элементы, но почему-то она не работает, я не могу понять, как я ошибаюсь. Ни то, ни другое не выдает никакой ошибки. вот мой код. `

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);
                        }
                    }
                }
            });`

помощь приветствуется. Спасибо


person JNI_OnLoad    schedule 08.03.2013    source источник


Ответы (3)


Когда вы прокручиваете список с помощью флажков, положение элементов будет меняться, так что отмеченные элементы могут быть не отмечены, а неотмеченные элементы могут быть отмечены. Поэтому выбранные элементы списка не отображаются должным образом. (Вы заметили эту проблему ??) для решения в этой проблеме вы должны использовать ArrayAdapter вместо baseAdapter. Перейдите по этой ссылке, чтобы решить проблему.

вместо класса 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;
}}  
person Venkat    schedule 08.03.2013

Вы пытаетесь проверить представление, представляющее ваш элемент. Вы сказали, что у вас есть флажок и текст, поэтому я предполагаю, что это LinearLayout. LinearLayout не реализует Checkable, поэтому вы не можете его проверить.

Вы можете либо реализовать подкласс LiearLayout, который реализует Checkable (это не весело, и большинство бесплатных решений в Интернете, которые я видел, либо сломаны по дизайну, либо неполны, так что они не будут работать ни при каких обстоятельствах) или вы ищете свой CheckBox внутри LinearLayout в вашем цикле.

person class stacker    schedule 08.03.2013

Я использую HashMap для отслеживания идентификаторов выбранных элементов.

person Dan Alboteanu    schedule 30.05.2017