ListView - установить первые два элемента с другим цветом фона - PullRequest
0 голосов
/ 04 июня 2011

На прикрепленном изображении фрагмента из блога Google в моем коде есть просмотр списка.Мой вопрос здесь состоит в том, чтобы установить первые два элемента (Генрих IV и Генрих V) с красными цветами фона, а другие остаются значениями по умолчанию для задних сторон.Возможно ли это?

Любая помощь будет очень признательна.

Спасибо, Сана.

Код, который я использую для получения ListView:

Log.i(TAG, "Selected item position = "+getListView().getCount()+" Child count = "+getListView().getChildCount());
for (int i=0; i<getListView().getCount();i++) { 
     Log.i(TAG, "Item id = "+getListView().getItemIdAtPosition(i));
     View v = getActivity().findViewById((int) getListView().getItemIdAtPosition(i));
     View v1 = getListView().getChildAt(i);
     Log.i(TAG, "Condition = "+(v == null)); //Here I get the display as true
     Log.i(TAG, "Condition1 = "+(v1 == null)); //Here I get again a true, so basically both are none!
}

enter image description here

Ответы [ 2 ]

2 голосов
/ 04 июня 2011

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

Полный примерто, что вы ищете, находится здесь:

public class TestStuff extends Activity {

    private class KingItem {
        public KingItem(String name, String description) {
            this.name = name;
            this.description = description;
            this.hexColor = "#000000";
        }
        public String name;
        public final String description;
        public String hexColor;
    }

    private List<KingItem> kings = new ArrayList<TestStuff.KingItem>();
    private ListView kingsList;
    private ArrayAdapter<String> kingAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        kings.add(new KingItem("Henry IV(1)", "Description form Henry IV(1)"));
        kings.add(new KingItem("Henry V", "Description for Henry V"));
        kings.add(new KingItem("Henry VIII", "Description for Henry VIII"));
        kings.add(new KingItem("Richard II", "Description for Richard II"));

        kingsList = (ListView) findViewById(R.id.list);
        if (kingAdapter == null) {
            kingAdapter = new KingsListAdapter(this, this, android.R.layout.simple_list_item_1, new ArrayList<String>());
        }
        kingAdapter.clear();
        kingsList.setAdapter(kingAdapter);
        kingsList.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView desc = (TextView) TestStuff.this.findViewById(R.id.text);
                KingItem king = kings.get(position);
                desc.setText(king.description);
                king.hexColor = "#0000ff";
                for (int i=0; i<position; i++) {
                    kings.get(i).hexColor = "#ff0000";
                }
                for (int i=position+1; i<kings.size(); i++) {
                    kings.get(i).hexColor = "#000000";
                }
                kingAdapter.notifyDataSetChanged();
            }
        });
        for (KingItem king : kings) {
            kingAdapter.add(king.name);
        }
        kingAdapter.notifyDataSetChanged();
    }

    private class KingsListAdapter extends ArrayAdapter<String> {

        private final Activity activity;
        private final int textViewResourceId;

        public KingsListAdapter(Activity activity, Context context, int textViewResourceId, List<String> kingsNames) {
            super(context, textViewResourceId, kingsNames);
            this.activity = activity;
            this.textViewResourceId = textViewResourceId;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(textViewResourceId, null);
            }
            KingItem kingItem = kings.get(position);

            TextView text1 = (TextView) v.findViewById(android.R.id.text1);
            text1.setText(kingItem.name);
            v.setBackgroundColor(Color.parseColor(kingItem.hexColor));
            return v;
        }

    }
}

. При этом каждый элемент отображается до выделенного в данный момент красным, а выбранный синий - все, что после выбранного в настоящий момент элемента возвращается на черный фон.

Заметьте, я просто устанавливаю KingItem на правильный цвет, а затем сообщаю списку, что нужно выполнить повторную визуализацию.Там нет необходимости получать взгляды или родителей и пытаться ловко установить фон.Вместо этого я храню эту информацию в KingItem и делаю адаптер очень простым.

1 голос
/ 04 июня 2011

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

http://www.androidpeople.com/android-custom-listview-tutorial-part-1

http://www.androidpeople.com/android-custom-listview-tutorial-part-2

И добавьте одну вещь в пользовательский список внутри кода, используемого ниже.

public View getView(int position, View convertView, ViewGroup parent) {
   ...... your code add extra line.
   if (position == 0 || position == 1){
    holder.layout.setBackgroundColor(Color.RED);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...