Фон элементов списка - PullRequest
       0

Фон элементов списка

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

Как изменить фоновое изображение для элементов списка, я могу изменить только 1 элемент фона за раз. Если в списке 6 элементов и если щелкнуть 3 элемента, следует изменить фоновые изображения этих 3 элементов, как это возможно Ниже мой код

public class Places extends Activity {

    private ListView listView;


    private int selectedListItem = -1;
    private Handler mHandler = new Handler();
    private Vector<String> data; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.places_custom_list_view);
        data = new Vector<String>();

        // Add data as per your requirement   
        data.add("one");
        data.add("two");
        data.add("three");
        data.add("four");
        data.add("five");
        listView = (ListView)findViewById(R.id.ListView01);
        listView.setDivider(null);

        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                selectedListItem = position;
                ((EfficientAdapter)listView.getAdapter()).notifyDataSetChanged();

                mHandler.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        // call any new activity here or do any thing you want here         

                    }
               }, 200L);
            }
        });

        listView.setAdapter(new EfficientAdapter(getApplicationContext()));   
    }

    private class EfficientAdapter extends BaseAdapter {
        private LayoutInflater mInflater;

        public EfficientAdapter(Context context) {
            mInflater = LayoutInflater.from(context);
        }

        public int getCount() {
            return data.size();
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

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

            ViewHolder holder;

            if (convertView == null || convertView.getTag() == null) {
                convertView = mInflater.inflate(R.layout.places_custom_row_view, null);
                holder = new ViewHolder();

                holder.txtName = (TextView) convertView
                    .findViewById(R.id.name);

                convertView.setTag(holder);
            } else {
                 holder = (ViewHolder) convertView.getTag();
            }

            if(position == selectedListItem) {  
                 holder.txtName.setBackgroundResource(R.drawable.cellbghover);
            } else {
                 holder.txtName.setBackgroundResource(R.drawable.cellbgnew);
            }

            holder.txtName.setText(data.get(position)); 

            return convertView;
        }
    }

    static class ViewHolder {
        TextView txtName;
    }

Ответы [ 4 ]

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

Попробуйте, это должно работать логически. (Кстати, я не пробовал: P)

...
 listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {


                EfficientAdapter.saveState.put(position,"selected");                


                mHandler.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        // call any new activity here or do any thing you want here                                 
                    }
               }, 200L);
            }
        });

    ...
    private class EfficientAdapter extends BaseAdapter {

        public static HashMap<Integer,String> saveState=new HashMap<Integer,String>();
        private LayoutInflater mInflater;

        public EfficientAdapter(Context context)
        {
            mInflater = LayoutInflater.from(context);
            for(int i=0;i<5;i++)
            {
               saveState.put(i,"unselected");
            }
        }
        public int getCount() {
            return data.size();
        }
        public Object getItem(int position) {
            return position;
        }
        public long getItemId(int position) {
            return position;
        }
        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder;

            if (convertView == null || convertView.getTag() == null) {
                convertView = mInflater.inflate(R.layout.places_custom_row_view, null);
                holder = new ViewHolder();

                holder.txtName = (TextView) convertView
                    .findViewById(R.id.name);

                convertView.setTag(holder);
            } else {
                 holder = (ViewHolder) convertView.getTag();
            }            

            if(saveState.get(position).equals("selected"))
               holder.txtName.setBackgroundResource(R.drawable.cellbghover);  
            else
               holder.txtName.setBackgroundResource(R.drawable.cellbgnew);

            holder.txtName.setText(data.get(position)); 

            return convertView;
        }
    }

    static class ViewHolder {

        TextView txtName;
    }
0 голосов
/ 09 января 2012

попробуйте

android:background="@drawable/img_list_background_repeater"
0 голосов
/ 09 января 2012
if(clickWord.size()!=0)
{               
  for(int i = 0;i<clickWord.size();i++){                       

  if(clickWord.get(i).equalsIgnoreCase(adListText[position])&&clickIndex.get(i)==position){
    wordChk.setBackgroundResource(R.drawable.star_1);

   }
 }              
}

Здесь clickWord - это список выбранных элементов.поэтому, когда элементы будут выделены, они будут добавлены в этот список, а когда обновится, я проверю все это с помощью этого цикла.

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

Каждый раз, когда вы нажимаете на элемент списка, весь список обновляется. Поэтому, если вы хотите показать ранее выбранные элементы, необходимо вести учет всех выбранных элементов. и когда список обновляется, вы должны проверить, что эти позиции были выбраны ранее или нет в соответствии с тем, какой цвет вы выбрали.

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...