我有布局:
<?xml version="1.0" encoding="utf-8"?>
<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/ListView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:textColor="@android:color/white"
android:dividerHeight="1px"
android:listSelector="@drawable/highlight_sel"
/>
</LinearLayout>
代码:
private ListView lv1;
private String lv_arr[]={"Item 1","Item 2","Item 3","Item 4"};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newsmenu);
lv1=(ListView)findViewById(R.id.ListView01);
// By using setAdpater method in listview we an add string array in list.
lv1.setAdapter(
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
lv_arr));
}
我希望第2项(或1或3或4)的文本颜色动态显示为红色(表示新项目)或白色(默认)。有没有办法做到这一点?
我已经有一个选择器,这就是我使用ListView的原因。我搜索了互联网和这个网站,我没有看到这个问题。
有可能吗?
答案 0 :(得分:3)
是的,一切皆有可能。您需要编写自己的适配器实现,基本上覆盖适配器中的getView方法。搜索谷歌和堆栈,你会发现很多关于如何编写适配器的教程。
答案 1 :(得分:2)
编写一个特殊的适配器来覆盖简单适配器中的getView是在列表视图中在您选择的行上交替更改文本颜色的方法。我在这个网站上采用了多次重复的例子,并添加了一种改变文本颜色的方法。选择颜色位置的位置模式长度可以替换为您喜欢的任何方案。文本视图“business”可以是我的布局的第一行 - 或者使用android.R.id.text1。
public class SpecialAdapter extends SimpleAdapter {
private int[] colors = new int[] { 0x30FF0000, 0x300000FF };
public SpecialAdapter(Context context, List<HashMap<String, String>> items, int resource, String[] from, int[] to) {
super(context, items, resource, from, to);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
int colorPos = position % colors.length;
//view.setBackgroundColor(colors[colorPos]); //old example
TextView tv1 = (TextView)view.findViewById(R.id.business); //new
tv1.setTextColor(colors[colorPos]); //new
return view;
}
}
只需在您的应用中使用SpecialAdapter而不是SimpleAdapter。
答案 2 :(得分:0)
这是一个getView方法的示例。请注意,它使用了一个视图来提高效率。如果您想了解更多相关信息,请与我联系。
public View getView(int position, View convertView, ViewGroup parent) {
tempDeal = exampleBoxArrayList.get(position);
ViewHolder holder;
if (convertView == null) {
convertView = inflator.inflate(R.layout.list_item_example_box, null);
holder = new ViewHolder();
holder.divider = (RelativeLayout) convertView.findViewById(R.id.example_box_divider);
holder.merchantName = (TextView) convertView.findViewById(R.id.example_box_merchant_name);
holder.expireDate = (TextView) convertView.findViewById(R.id.example_box_expire_date);
holder.description = (TextView) convertView.findViewById(R.id.example_box_description);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (tempDeal.isDivider()) {
holder.divider.setVisibility(View.VISIBLE);
} else {
holder.divider.setVisibility(View.GONE);
}
holder.merchantName.setText(tempDeal.getMerchantName());
holder.expireDate.setText(tempDeal.getExpiryDateString());
holder.description.setText(tempDeal.getPriceOption().getDescription());
return convertView;
}
如您所见,我在自定义对象上调用isDivider()
方法(此方法在数据加载时查看布尔值集)。此方法用于打开或关闭部分布局的可见性。
或者,您可以基于同样的概念加载全新的布局。