在依赖数组适配器的列表视图中以编程方式更改文本颜色
Change textcolor programmatically in listview who depends of arrayadapter
我有下一个结构:
ArrayList<String> arrayList = new ArrayList<>();
list = (ListView) findViewById(R.id.list1);
arrayAdapter = new ArrayAdapter<String>(INGR_NOTAS.this, R.layout.list_item_clickable, R.id.txtitem, arrayList);
list.setAdapter(arrayAdapter);
listview 的布局来自 list_item_clickable.xml 和其中的 textiview "txtitem":
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txtitem"
android:textColor="@android:color/white"
android:background="@android:drawable/editbox_dropdown_dark_frame"
android:textAlignment="center" />
</LinearLayout>
这个结构在很多 类 中都有效,就像 Textview 所说的那样,文本颜色始终为白色,但现在我需要根据文本的值更改列表视图中的文本颜色(有时白色,有时是红色)。那么,如何添加此更改而不会对整个应用程序的其余代码产生重大影响????
感谢任何建议!!
创建您自己的 extends ArrayAdapter
适配器并覆盖 getView()
。没那么复杂。
试试这个:
ArrayList<String> arrayList = new ArrayList<>();
list = (ListView) findViewById(R.id.list1);
arrayAdapter = new ArrayAdapter<String>(INGR_NOTAS.this, R.layout.list_item_clickable, R.id.txtitem, arrayList){
@Override
public View getView(int position, View convertView, ViewGroup parent){
View view = super.getView(position, convertView, parent);
((TextView)view.findViewById(R.id.txtitem)).setTextColor(position % 2 == 0 ? Color.WHITE : Color.RED); // here can be your logic
return view;
};
};
list.setAdapter(arrayAdapter);
希望对您有所帮助
如果基于数组列表项,则使用textView.setTextColor(getResources().getColor(R.id.red);
。然后创建一个扩展 ArrayAdapter
的 class,在 getView(,,)
方法中设置颜色。
示例:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item1, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.text);
holder.textView.setTextColor(getResources().getColor(R.id.your_color);
convertView.setTag(holder);
}
return convertView;
}
使用 SimpleAdapter 也可以。这是我的解决方案。
List<Map<String, String>> detailsList = debitorRecord.getDetails();
String[] from = {"created_at","comment","sum"};
int[] to = {R.id.detailCreatedAt, R.id.detailComment, R.id.detailSum};
ListAdapter listAdapter = new SimpleAdapter(this, detailsList, R.layout.list_detail_item, from, to)
{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView textView = (TextView) view.findViewById(R.id.detailSum);
//Do what u want here, in my case I
Map<String, String> currentRow = detailsList.get(position);
int type = Integer.parseInt(currentRow.get("type"));
if (DebitorRecord.TYPE_PAYMENT == type) textView.setTextColor(Color.GREEN);
else textView.setTextColor(Color.RED);
return view;
}
};
listView.setAdapter(listAdapter);
我有下一个结构:
ArrayList<String> arrayList = new ArrayList<>();
list = (ListView) findViewById(R.id.list1);
arrayAdapter = new ArrayAdapter<String>(INGR_NOTAS.this, R.layout.list_item_clickable, R.id.txtitem, arrayList);
list.setAdapter(arrayAdapter);
listview 的布局来自 list_item_clickable.xml 和其中的 textiview "txtitem":
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txtitem"
android:textColor="@android:color/white"
android:background="@android:drawable/editbox_dropdown_dark_frame"
android:textAlignment="center" />
</LinearLayout>
这个结构在很多 类 中都有效,就像 Textview 所说的那样,文本颜色始终为白色,但现在我需要根据文本的值更改列表视图中的文本颜色(有时白色,有时是红色)。那么,如何添加此更改而不会对整个应用程序的其余代码产生重大影响????
感谢任何建议!!
创建您自己的 extends ArrayAdapter
适配器并覆盖 getView()
。没那么复杂。
试试这个:
ArrayList<String> arrayList = new ArrayList<>();
list = (ListView) findViewById(R.id.list1);
arrayAdapter = new ArrayAdapter<String>(INGR_NOTAS.this, R.layout.list_item_clickable, R.id.txtitem, arrayList){
@Override
public View getView(int position, View convertView, ViewGroup parent){
View view = super.getView(position, convertView, parent);
((TextView)view.findViewById(R.id.txtitem)).setTextColor(position % 2 == 0 ? Color.WHITE : Color.RED); // here can be your logic
return view;
};
};
list.setAdapter(arrayAdapter);
希望对您有所帮助
如果基于数组列表项,则使用textView.setTextColor(getResources().getColor(R.id.red);
。然后创建一个扩展 ArrayAdapter
的 class,在 getView(,,)
方法中设置颜色。
示例:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item1, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.text);
holder.textView.setTextColor(getResources().getColor(R.id.your_color);
convertView.setTag(holder);
}
return convertView;
}
使用 SimpleAdapter 也可以。这是我的解决方案。
List<Map<String, String>> detailsList = debitorRecord.getDetails();
String[] from = {"created_at","comment","sum"};
int[] to = {R.id.detailCreatedAt, R.id.detailComment, R.id.detailSum};
ListAdapter listAdapter = new SimpleAdapter(this, detailsList, R.layout.list_detail_item, from, to)
{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView textView = (TextView) view.findViewById(R.id.detailSum);
//Do what u want here, in my case I
Map<String, String> currentRow = detailsList.get(position);
int type = Integer.parseInt(currentRow.get("type"));
if (DebitorRecord.TYPE_PAYMENT == type) textView.setTextColor(Color.GREEN);
else textView.setTextColor(Color.RED);
return view;
}
};
listView.setAdapter(listAdapter);