Android - ListView带有2种不同颜色

6
我有一个ListView,想要改变它的背景色。希望实现的效果是这样的:1.项=灰色; 2.项=白色; 3.项=灰色; 4.项=白色等等。所以它应该有两种不同的背景颜色。我尝试了将近两个小时,但是感到困惑,无法找到解决方案。下面是我尝试过的方法:
    for(int counter = 0; counter < itemList.size(); counter++){
            if( adapter.getItem(position) %2 == 1 ){
               Layout.setBackgroundColor(Color.GREY)
                    };
          else{
            Layout.setBackgroundColor(Color.WHITE);
              }

这里是我的全部代码。希望有人能告诉我:

MainActivity

public class MainActivity extends Activity implements OnItemClickListener {

    ListView lview3;
    ListViewCustomAdapter adapter;
    private ArrayList<Object> itemList;
    private ItemBean bean;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        prepareArrayLits();
        lview3 = (ListView) findViewById(R.id.listView1);
        adapter = new ListViewCustomAdapter(this, itemList);
        lview3.setAdapter(adapter);




        lview3.setOnItemClickListener(this);
    }

    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
        // TODO Auto-generated method stub
         RelativeLayout Layout = (RelativeLayout) findViewById(R.id.relativeLayout1);
        ItemBean bean = (ItemBean) adapter.getItem(position);
         for(int counter = 0; counter < itemList.size(); counter++){
             adapter.getItem(position);
            Layout.setBackgroundColor(Color.CYAN);}

        Toast.makeText(this, "Title => "+bean.getTitle()+" \n Description => "+bean.getDescription(), Toast.LENGTH_SHORT).show();
    }

    /* Method used to prepare the ArrayList,
     * Same way, you can also do looping and adding object into the ArrayList.
     */
    public void prepareArrayLits()
    {
        itemList = new ArrayList<Object>();

        AddObjectToList(R.drawable.ic_add, "add", "Add desc", "2");
        AddObjectToList(R.drawable.ic_delete, "Delete", "Delete desc", "2");
        AddObjectToList(R.drawable.ic_down, "Down", "Down desc", "2");
        AddObjectToList(R.drawable.ic_info, "Information", "Information desc", "2");
        AddObjectToList(R.drawable.ic_help, "Help", "Help desc", "2");
        AddObjectToList(R.drawable.ic_download, "Download", "Download desc", "2");
        AddObjectToList(R.drawable.ic_mail, "Mail", "Mail desc", "2");
        AddObjectToList(R.drawable.ic_search, "Search", "Search desc", "2");
        AddObjectToList(R.drawable.ic_settings, "Settings", "Settings desc", "2");

    }

    // Add one item into the Array List
    public void AddObjectToList(int image, String title, String desc, String duration)
    {

        bean = new ItemBean();
        bean.setduration(duration);
        bean.setDescription(desc);
        bean.setImage(image);
        bean.setTitle(title);
        itemList.add(bean);
    }



}

ItemBean

public class ItemBean 
{
    String title;
    String description;
    int image;
    String duration;

    public String getTitle() {
        return title;
    }
    public String getDuration() {
        return duration;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }   

    public void setduration(String duration) {
        this.duration = duration;
    }   
}

ListViewCustomAdapter

public class ListViewCustomAdapter extends BaseAdapter{

    ArrayList<Object> itemList;

    public Activity context;
    public LayoutInflater inflater;

    public ListViewCustomAdapter(Activity context,ArrayList<Object> itemList) {
        super();

        this.context = context;
        this.itemList = itemList;

        this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return itemList.size();
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return itemList.get(position);
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    public static class ViewHolder
    {
        ImageView imgViewLogo;
        TextView txtViewTitle;
        TextView txtViewDescription;
        TextView duration;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        ViewHolder holder;
        if(convertView==null)
        {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.items, null);

            holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo);
            holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle);
            holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription);
            holder.duration = (TextView) convertView.findViewById(R.id.duration);

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

        ItemBean bean = (ItemBean) itemList.get(position);

        holder.imgViewLogo.setImageResource(bean.getImage());
        holder.txtViewTitle.setText(bean.getTitle());
        holder.txtViewDescription.setText(bean.getDescription());
        holder.duration.setText(bean.getDuration());



        return convertView;
    }

}

XML布局: *项目*

<RelativeLayout     android:id="@+id/relativeLayout1"   android:layout_width="fill_parent"  android:layout_height="wrap_content"    android:background="@drawable/list_selector"    xmlns:android="http://schemas.android.com/apk/res/android"  android:padding="5dip">

    <ImageView
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:padding="3dip"  
        android:id="@+id/imgViewLogo"
        android:src="@drawable/icon"
        android:layout_alignParentLeft="true"
        android:layout_centerInParent="true"
        android:background="@drawable/image_bg" 
        android:layout_marginRight="5dip"
        android:scaleType="center"
        >
    </ImageView>

    <TextView
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/imgViewLogo"
        android:text="TextView"
        android:layout_width="wrap_content"
        android:id="@+id/txtViewTitle"
        android:layout_toRightOf="@+id/imgViewLogo"
        android:textColor="#040404"
        android:typeface="sans" 
        android:textSize="20dip"
        android:textStyle="bold"
        android:layout_marginRight="15dp"
        >
    </TextView>

    <TextView
        android:layout_height="wrap_content"
        android:text="TextView"
        android:layout_width="wrap_content"
        android:id="@+id/txtViewDescription"

         android:textColor="#343434"
        android:textSize="15dip"
        android:layout_marginTop="1dip"
        android:layout_toRightOf="@+id/imgViewLogo"
        android:layout_below="@+id/txtViewTitle"
        android:layout_marginLeft="2dip"
        android:layout_marginRight="15dp"
        >
    </TextView>
    <TextView
        android:id="@+id/duration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/txtViewTitle"
        android:gravity="right"
        android:layout_marginRight="5dip"
        android:textSize="15dip"
        android:textColor="#10bcc9"
        android:textStyle="bold"/>

     <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/arrow"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"

        />

</RelativeLayout>

布局: *主要*

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"


    >


    <ListView 
        android:id="@+id/listView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:divider="#b5b5b5"
        android:dividerHeight="1dp"
        android:listSelector="@drawable/list_selector" 
        />



</LinearLayout>

每一个技巧都会有所帮助,谢谢。

5个回答

13

不要使用那个for循环在后期设置背景颜色。在您的适配器的getView方法中完成它。试试这样:

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

    /* remainder is unchanged */

    convertView.setBackgroundColor(position % 2 == 0 ? Color.WHITE : Color.GREY);
    return convertView;
}

我离开了一周,所以没法测试它。现在我很困惑如何设置它。你能帮帮我吗?我应该在onCreate()中调用getView()方法吗?并且我应该插入什么参数?谢谢。 - Ahmad

3

这是使用选择器切换器改变背景的另一种方法。使用此方法将保留选择器的悬停和焦点颜色。

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

    /* remainder is unchanged */

   convertView.setBackgroundResource(position % 2 == 0 ? R.drawable.list_selector_first : R.drawable.list_selector_second);
    return convertView;
}

0

你可以通过在自定义适配器的getView函数中设置背景来轻松实现此操作。

尝试使用以下代码:

    if(position % 2 == 0)
            convertView.setBackgroundColor(Color.GREY);
    else
            convertView.setBackgroundColor(Color.WHITE);

0
你可以根据传入的项位置从getView返回不同的视图。

-1

我相信你可以根据位置来完成这个任务

        if (position == 0)
        {
            view.SetBackgroundColor(Android.Graphics.Color.gray);  
        }
        else if (position == 1)
        {
            view.SetBackgroundColor(Android.Graphics.Color.white);
        }

根据您拥有的职位数量等情况,等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接