我刚开始使用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)。
我无法理解自定义适配器的工作原理,也因为我无法在主要活动中对其进行测试!
答案 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的一个例子,但你会明白这个想法。这并不难。