Как изменить фон элементов мултипа в списке - PullRequest
0 голосов
/ 05 января 2012

У меня есть список с фоновым изображением для каждого элемента. У меня вопрос, как выбрать несколько элементов в списке и как изменить их фон. С помощью этого кода я могу выбрать только 1 элемент одновременно. Ниже мой xml для просмотра списка.

main.xml

<ListView android:layout_height="350dp" android:id="@id/ListView01" android:layout_width="fill_parent"></ListView>

itemrow.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:background="@layout/list_bg"
  android:orientation="vertical">

<TextView android:id="@+id/name"        
    android:textSize="16sp"   android:paddingLeft="25dp"       
    android:textStyle="bold"  android:text="hello"
    android:textColor="#FFFFFF" android:gravity="center_vertical"
    android:layout_width="fill_parent" android:layout_height="wrap_content"/>

</LinearLayout>

list_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_window_focused="false" android:state_selected="true" 
  android:drawable="@android:color/transparent" /> 
<item 
 android:state_selected="false"
    android:state_pressed="false" 
    android:drawable="@drawable/cellbgnew" />
<item android:state_pressed="true" 
    android:drawable="@drawable/cellbghover" />
<item android:state_selected="true"
 android:state_pressed="false" 
    android:drawable="@drawable/cellbghover" />
</selector>

Ответы [ 5 ]

1 голос
/ 06 января 2012

Хорошо, найдите приведенный ниже код для примера деятельности.

public class SampleActivity extends Activity {
    private String[] arrItems={"A", "B", "C", "D", "E"};
    private boolean[] arrState={false, false, false, false, false};
    private ListView lv;
    private ArrAdapter adapter;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv=(ListView) findViewById(R.id.listItems);
        adapter=new ArrAdapter(this);
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position,
                    long id) {
                // TODO Auto-generated method stub
                arrState[position]=!arrState[position];
                adapter.notifyDataSetChanged();
            }
        });
    }

    private class ArrAdapter extends ArrayAdapter<String>
    {
        Context mContext=null;
        public ArrAdapter(Context context) {
            super(context, R.layout.row);
            // TODO Auto-generated constructor stub
            mContext=context;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View vi=convertView;
            ViewHolder holder=null;
            if(vi==null)
            {
                vi=LayoutInflater.from(mContext).inflate(R.layout.row, parent, false);
                holder=new ViewHolder();
                holder.mTxt=(TextView) vi.findViewById(R.id.lbl);
                vi.setTag(holder);
            }
            else
                holder=(ViewHolder) vi.getTag();
            holder.mTxt.setText(arrItems[position]);
            if(arrState[position])
                vi.setBackgroundColor(Color.BLUE);
            else
                vi.setBackgroundColor(Color.WHITE);
            return super.getView(position, convertView, parent);
        }


        private class ViewHolder
        {
            TextView mTxt=null;
        }


    }

    private void clear()
    {
        Arrays.fill(arrState, false);
        adapter.notifyDataSetChanged();
    }
1 голос
/ 05 января 2012

Это возможно с ListView.CHOICE_MODE_MULTIPLE

, пожалуйста, проверьте пример, доступный по ссылке ниже, это может помочь вам.

Пример списка множественных вариантов Android ListView

Новый ответ:

Как выбрать несколько элементов в ListView ?Мы можем выбрать только один элемент за один раз.Можно проверить несколько элементов в ListView с помощью CHOICE_MODE_MULTIPLE , для того же самого, что я дал ссылку на Пример.

Если вам нужно выбрать несколько элементов в ListView, егоне представляется возможным.

Еще один вопрос также доступен с тем же требованием, пожалуйста, проверьте его. , Это может помочь вам. Выбор нескольких элементов в ListView

0 голосов
/ 06 января 2012

Не думаю, что я могу написать полный код, но я стараюсь изо всех сил решить вашу проблему:

открытый класс MainActivity расширяет активность { void onCreate () { setContentView (R.layout.main);

} }

0 голосов
/ 05 января 2012

Пожалуйста, следуйте следующей простой стратегии:

Создайте логический массив, имеющий размер списка.установить начальные значения всех элементов массива в false.в методе GetView setBackground передайте фоновое значение в соответствии со значением в массиве в этой позиции.setItemClickListener в списке, имеющем body arr [position] =! arr [position], и перезагрузите список, вызвав метод adapter.notifyDatasetInvalidated ().

0 голосов
/ 05 января 2012

Вы можете использовать ListView.setChoiceMode (ListView.MULTIPLE_CHOICE_MODE) для достижения этой цели.или можете создать свой собственный макет.

...