为每个列表项创建一个包含自定义背景的列表

时间:2013-02-09 14:46:16

标签: java android android-layout android-listview

我刚开始使用Android而我在线搜索我无法找到解决问题的方法:

我有一个hashmap,其中键是一个课程的名称,值是我在截止日期之前的天数。我想从这个hashmap中创建一个列表,如果我有不到1/2天,该项目有红色背景颜色,否则它有绿色。

我开始使用阵列适配器,但我找不到解决方案:

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    R.layout.list_costum_text, R.id.list_content, values);

    setListAdapter(adapter);

目前,“values”只是一个包含课程名称的数组。 我现在正在寻找Costum适配器,但我仍然遇到一些问题

编辑:

如果我按照vogella上的教程我可以做这项工作(我正在修改主要活动):

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class MainActivity extends ListActivity {
  public void onCreate(Bundle icicle) {
  super.onCreate(icicle);

   String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
    "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
    "Linux", "OS/2" };

   ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    R.layout.list_costum_text, R.id.red_list, values);

setListAdapter(adapter);




setContentView(R.layout.activity_main);
 }
 }

其中activity_main.xml是ListView布局,list_costum_text包含两个编辑文本(一个是red_list)。

我无法理解自定义适配器的工作原理,也因为我无法在主要活动中对其进行测试!

1 个答案:

答案 0 :(得分:0)

您应该通过扩展ArrayAdapter创建自定义适配器,然后编写自己的getView()方法。

征求意见后的其他信息

任何适配器大致做的是:它为每个项目采用xml布局,膨胀然后用值填充UI元素。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    textView.setText(values[position]);
    // Change the icon for Windows and iPhone
    String s = values[position];
    if (s.startsWith("iPhone")) {
      imageView.setImageResource(R.drawable.no);
    } else {
      imageView.setImageResource(R.drawable.ok);
    }
return rowView;

}

这只是http://www.vogella.com/articles/AndroidListView/article.html的一个例子,但你会明白这个想法。这并不难。