ListView-设置前两个项目具有不同的背景色

问题描述

| 在Google \'s blog的片段布局的附图中,我的代码中有一个listview。我在这里的问题是,将前两个项目(Henry IV和Henry V)设置为红色,而其他颜色保留为默认backgroudn值。这可能吗? 任何帮助将非常感激。 谢谢, 萨那 我用来获取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!
}
    

解决方法

        是的,有可能...请检查以下链接 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);
   }
}
    ,        最好的选择是为Kings保存一个数据项,并使用数组适配器渲染它们,您可以在更改时通知更改并设置适当的颜色。 以下是您追求的完整示例:
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,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:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...