gpt4 book ai didi

android - 改变 ListView 行项目的颜色

转载 作者:行者123 更新时间:2023-11-30 03:43:38 25 4
gpt4 key购买 nike

这是我应用程序上的联盟 Activity : ActAlliances.java

这是单行的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alignmentMode="alignBounds"
android:orientation="horizontal"
android:useDefaultMargins="true" >

<TextView
android:id="@+id/allc_lstRow_textView1"
android:layout_width="50sp"
android:layout_height="wrap_content"
android:gravity="right"
android:paddingRight="10dp"
android:text="@string/tallc_id"
android:textSize="18sp"/>
<TextView
android:id="@+id/allc_lstRow_textView2"
android:layout_width="140sp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/allc_lstRow_textView1"
android:gravity="left"
android:text="@string/lst_item_allc_name"
android:textSize="18sp"/>
<TextView
android:id="@+id/allc_lstRow_invisible"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/allc_lstRow_textView2"
android:layout_width="1dip"
android:gravity="left"
android:textSize="1sp"/>
<TextView
android:id="@+id/allc_lstRow_textView3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/allc_lstRow_invisible"
android:layout_gravity="right"
android:gravity="right"
android:text="@string/lst_item_allc_power"
android:textSize="18sp"/>
</RelativeLayout>

这是带有 ViewBinder 的 SimpleCursorAdapter,用于自定义联盟的颜色(灰色代表中立,蓝色代表盟友,绿色代表附庸,红色代表敌人):

SimpleCursorAdapter dataAdapter = new SimpleCursorAdapter(
this,
R.layout.lst_row_act_allc,
mCursor,
cols,
to,
0);
dataAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int column) {
if( column == 1 ){
TextView tv = (TextView) view;
String mPltc = cursor.getString(cursor.getColumnIndex("FPLTC"));
if (BuildConfig.DEBUG) {
Log.i(Constants.TAG_ACTALLIANCES, "loadAllianceData(): Alliance Name: "+cursor.getString(cursor.getColumnIndex("FANAME")));
Log.i(Constants.TAG_ACTALLIANCES, "loadAllianceData(): Political Relation: "+mPltc);
}
// Set color of item based on Political Relation
if(mPltc.equals("Ally")){
tv.setTextColor(Color.parseColor("#6699ff"));
String mAN = cursor.getString(cursor.getColumnIndex("FANAME"));
tv.setText(mAN);
}
if(mPltc.equals("Vassal")){
tv.setTextColor(Color.parseColor("#00ff00"));
String mAN = cursor.getString(cursor.getColumnIndex("FANAME"));
tv.setText(mAN);
}
if(mPltc.equals("Enemy")){
tv.setTextColor(Color.parseColor("#ff0000"));
String mAN = cursor.getString(cursor.getColumnIndex("FANAME"));
tv.setText(mAN);
}
if(mPltc.equals("Neutral")){
String mAN = cursor.getString(cursor.getColumnIndex("FANAME"));
tv.setText(mAN);
}
return true;
}
return false;
}
});

现在根据 Logcat,持有联盟名称的 TextView 与数据库表中表示政治关系的列相匹配:

03-11 21:48:15.229: I/ActAlliances(7823): loadAllianceData(): Alliance Name: IMMORTALS
03-11 21:48:15.328: I/ActAlliances(7823): loadAllianceData(): Political Relation: Neutral
03-11 21:48:15.497: I/ActAlliances(7823): loadAllianceData(): Alliance Name: Legion of Anarchy
03-11 21:48:15.497: I/ActAlliances(7823): loadAllianceData(): Political Relation: Ally
03-11 21:48:15.590: I/ActAlliances(7823): loadAllianceData(): Alliance Name: TheCulture
03-11 21:48:15.590: I/ActAlliances(7823): loadAllianceData(): Political Relation: Enemy
03-11 21:48:15.608: I/ActAlliances(7823): loadAllianceData(): Alliance Name: Rising Storm
03-11 21:48:15.608: I/ActAlliances(7823): loadAllianceData(): Political Relation: Vassal
03-11 21:48:15.647: I/ActAlliances(7823): loadAllianceData(): Alliance Name: NULL ALLIANCE
03-11 21:48:15.647: I/ActAlliances(7823): loadAllianceData(): Political Relation: Neutral
03-11 21:48:15.677: I/ActAlliances(7823): loadAllianceData(): Alliance Name: OMEGA 27
03-11 21:48:15.677: I/ActAlliances(7823): loadAllianceData(): Political Relation: Neutral

然而,就目前而言,这里有两个问题:

  1. setViewValue() 在显示 ListView 时和用户执行任何操作之前运行不少于 4 次。
  2. 列表中的第一个项目(在本例中是 IMMORTALS)根据上次应用的颜色重新着色(因为灰色是列表项目的默认颜色,它不算数,因为代码只显示中立联盟不使用颜色的名称。

我需要修复这些错误,非常感谢任何帮助。

注意:我没有使用 ListActivity,因为前两行(Sector、Number of Alliances)不是 ListView 的一部分;我愿意重新考虑这个决定。

最佳答案

  1. 我真的看不出这里有什么问题。
  2. 在上一条语句中将文本颜色设置为默认值:

    if(mPltc.equals("Neutral")){
    tv.setTextColor(Color.parseColor("#444444"));
    String mAN = cursor.getString(cursor.getColumnIndex("FANAME"));
    tv.setText(mAN);
    }

除此之外,我建议让代码更具可读性——你在每个 if 语句中做同样的事情——要么将它提取到一个私有(private)方法中,要么将它移出语句。

您还可以将 if 语句替换为 switch-case 并使用 Enums

关于android - 改变 ListView 行项目的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15349890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com