大きな説明 (より安全な...)、すべてを読みたくない場合は、太字で質問してください。助けてくれてどうもありがとう!
ListView
と 2 つのカスタム XMLを持つアプリがあります。1 つは、ヘッダー用の単一の TextView です。もう一方には、データを表す 3 つの TextView と 3 つの ImageView があります。
ほとんどの人が知っているように、Jeff Sharkeyは既に非常に巧妙な (imho) ソリューション( SeparatedListAdapter
) を持っています。これにより、クラスは変更なしで ImageView で機能します。String
s を受け入れますvalueOf
が、drawable int リソースの を提供できます。最後にコードと画面を参照してください (簡単にするために、彼のクラスはここにはありません)。
問題は、私のプロジェクトでは、使用する社内の独自コードのスタックが与えられていることです。また、Sharkey のコードは GPLv3 であり、私が彼のコードを使用する可能性を排除しています。したがって、他のコードが GPL の力に「引き付けられる」ことなく、そのコードにリンクできるようにする解決策を知っているかもしれません。私はそれの政治について話し合っているわけではないので、そうでない場合は感謝します. その上、私は回避しているのではなく、合法的に回避しています。
今のところ、 ASL 2 であるcwac-mergeを見つけることができました。しかし、これまでのところ、文字列とドローアブルをカスタム XML レイアウトのカスタム TextView と ImageView に「マップ」することはできませんでした。また、サンプルアプリは、リモートで必要と思われるものとはまったく異なるアプローチを使用しています。
私が何をしようとしているのか知りたい場合は、SeparatedListAdapter
以下のクラスを参照してください。cwac-merge の場合は、何があっても強制終了するので、あえて投稿しません。
package com.uitests;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;
public class TestActivity extends ListActivity {
public final static String ITEM_TITLE = "title";
public final static String ITEM_STATE = "state";
public final static String ITEM_TEMPERATURE = "temperature";
public final static String ITEM_UP = "up";
public final static String ITEM_DOWN = "down";
public final static String ITEM_LEVEL = "level";
public Map<String,?> createItem(
String title, String state, String temperature,
String upImage, String downImage, String levelImage) {
Map<String,String> item = new HashMap<String,String>();
item.put(ITEM_TITLE, title);
item.put(ITEM_STATE, state);
item.put(ITEM_TEMPERATURE, temperature);
item.put(ITEM_UP, upImage);
item.put(ITEM_DOWN, downImage);
item.put(ITEM_LEVEL, levelImage);
return item;
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// THIS IS JUST AN EXAMPLE TO POPULATE THE LIST FOR STACKOVERFLOW!
List<Map<String,?>> controlA = new LinkedList<Map<String,?>>();
controlA.add(createItem(
"Monitor 001AK",
"Functional",
"27",
String.valueOf(R.drawable.ic_up),
String.valueOf(R.drawable.ic_down_off),
String.valueOf(R.drawable.ic_level07)));
// MORE .adds HERE
List<Map<String,?>> controlB = new LinkedList<Map<String,?>>();
controlB.add(createItem(
"Monitor 003CK",
"Functional",
"29",
String.valueOf(R.drawable.ic_up),
String.valueOf(R.drawable.ic_down_off),
String.valueOf(R.drawable.ic_level07)));
// MORE .adds HERE
SeparatedListAdapter adapter = new SeparatedListAdapter(this);
adapter.addSection(
"Control 1",
new SimpleAdapter(
this,
controlA,
R.layout.equip_row,
new String[] {
ITEM_TITLE,
ITEM_STATE,
ITEM_TEMPERATURE,
ITEM_UP,
ITEM_DOWN,
ITEM_LEVEL },
new int[] {
R.id.tide_row_title, // TextView
R.id.tide_row_state, // TextView
R.id.tide_row_temperature, // TextView
R.id.tide_row_img_up, // ImageView
R.id.tide_row_img_down, // ImageView
R.id.tide_row_img_level } // ImageView
)
);
adapter.addSection(
"Control 2",
new SimpleAdapter(
this,
controlB,
R.layout.equip_row,
new String[] {
ITEM_TITLE,
ITEM_STATE,
ITEM_TEMPERATURE,
ITEM_UP,
ITEM_DOWN,
ITEM_LEVEL },
new int[] {
R.id.tide_row_title,
R.id.tide_row_state,
R.id.tide_row_temperature,
R.id.tide_row_img_up,
R.id.tide_row_img_down,
R.id.tide_row_img_level }
)
);
this.getListView().setAdapter(adapter);
}
}
そのシンプルさのすべてが、この素晴らしい画面につながります。