大解释(更安全...),如果您不想全部阅读,请用粗体提问。非常感谢你的帮助!
我有一个带有ListView
, 和两个自定义 XML 的应用程序。一种是用于标题的单个 TextView。另一个有 3 个 TextViews 和 3 个 ImageViews 代表数据。
正如你们大多数人所知,Jeff Sharkey已经有一个非常聪明(恕我直言)的解决方案(SeparatedListAdapter
),它允许类无需修改即可使用 ImageViews。虽然它接受String
s,但我可以提供valueOf
可绘制的 int 资源的,它会弄清楚的。太好了,请参阅最后的代码和屏幕(为简单起见,他的课程不在此处)。
问题是,对于我的项目,我得到了一堆内部的专有代码来使用。而且Sharkey的代码是GPLv3,排除了我使用他的代码的可能性。因此,也许您可以知道一个解决方案,该解决方案允许我链接到该代码,而我的其他代码不会被 GPL 的力量“吸引”。我不是在讨论它的政治,所以如果你不这样做,我很感激。此外,我不是在规避,我是在合法地避免它。
现在,我已经能够找到cwac-merge,它是 ASL 2。但到目前为止,我无法将字符串和可绘制对象“映射”到自定义 XML 布局中的自定义 TextViews 和 ImageViews。此外,示例应用程序使用了与我认为我远程需要的完全不同的方法。
如果您想看看我在做什么,请参阅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);
}
}
所有这些简单性造就了这个伟大的屏幕: