これは私のアプリのアライアンスアクティビティです。
これは、単一行のレイアウトです。
<?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
しかし、現状では、ここには2つの問題があります。
- setViewValue()は、ListViewが表示されているとき、およびユーザーが何かを行う前に4回以上実行されます。
- リストの最初のアイテム(この場合はIMMORTALS)は、最後に適用された色に応じて色が変更されます(リストアイテムの場合、グレーがデフォルトの色であるため、コードは適用せずにニュートラルアライアンス名を表示するだけなので、実際にはカウントされません色。
私はこれらのバグを修正する必要があり、あらゆる支援をいただければ幸いです。
注:最初の2行(セクター、アライアンスの数)はListViewの一部ではないため、ListActivityは使用しませんでした。私はその決定を再考するつもりです。