Android 使用J.Sharkey';s分离列表适配器

Android 使用J.Sharkey';s分离列表适配器,android,listview,licensing,adapter,sections,Android,Listview,Licensing,Adapter,Sections,大解释(更安全…),如果你不想全部阅读,用粗体提问。非常感谢你的帮助 我有一个带有列表视图的应用程序和两个自定义XML。一个是单个文本视图,用于标题。另一个有3个文本视图和3个图像视图来表示数据 正如大多数人所知,已经有一个(SeparatedListAdapter),它允许类在不做修改的情况下使用ImageView。虽然它接受Strings,但我可以提供可绘制int资源的valueOf,它会计算出来。太好了,请参阅最后的代码和屏幕(为了简单起见,他的类不在这里) 问题是,对于我的项目,我得到了

大解释(更安全…),如果你不想全部阅读,用粗体提问。非常感谢你的帮助

我有一个带有
列表视图的应用程序和两个自定义XML。一个是单个文本视图,用于标题。另一个有3个文本视图和3个图像视图来表示数据

正如大多数人所知,已经有一个(
SeparatedListAdapter
),它允许类在不做修改的情况下使用ImageView。虽然它接受
String
s,但我可以提供可绘制int资源的
valueOf
,它会计算出来。太好了,请参阅最后的代码和屏幕(为了简单起见,他的类不在这里)

问题是,对于我的项目,我得到了一堆内部专有代码。Sharkey的代码是GPLv3,这排除了我使用他的代码的可能性。因此,也许您可以知道一种解决方案,它允许我链接到该代码,而不会让我的其他代码被GPL的力量“吸引”。我不是在讨论它的政治性,所以如果你不这样做,我很感激。此外,我不是在逃避,我是在合法地逃避

现在,我已经找到了,那就是ASL2。但到目前为止,我无法在自定义XML布局中将字符串和可绘制内容“映射”到自定义TextView和ImageView。此外,示例应用程序使用了一种完全不同的方法来满足我认为远程需要的内容

如果您想知道我在做什么,请参阅下面的
SeparatedListAdapter
和我的类。对于cwac合并,无论发生什么,它都会强制关闭,所以我不想麻烦发布

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);  

}  

}
package com.uitests;
导入java.util.HashMap;
导入java.util.LinkedList;
导入java.util.List;
导入java.util.Map;
导入android.app.ListActivity;
导入android.os.Bundle;
导入android.widget.simpledapter;
公共类TestActivity扩展了ListActivity{
公共最终静态字符串项\u TITLE=“TITLE”;
公共最终静态字符串项_STATE=“STATE”;
公共最终静态字符串项_TEMPERATURE=“TEMPERATURE”;
公共最终静态字符串项\u UP=“UP”;
公共最终静态字符串项\u DOWN=“DOWN”;
公共最终静态字符串项\u LEVEL=“LEVEL”;
公共地图创建项(
字符串标题、字符串状态、字符串温度、,
字符串upImage、字符串downImage、字符串levelImage){
Map item=newhashmap();
项目名称(项目名称、标题);
物品放置(物品状态,状态);
物品放置(物品温度、温度);
物品。放置(物品上架,上映);
item.put(item_DOWN,downImage);
item.put(item_LEVEL,levelImage);
退货项目;
}
@凌驾
创建(捆绑冰柱)时的公共空间{
超级冰柱;
//这只是一个填充STACKOVERFLOW列表的示例!
List controlA=新链接列表();
controlA.add(创建项(
“监视器001AK”,
“功能性”,
"27", 
字符串值(R.drawable.ic_up),
字符串.valueOf(R.drawable.ic\u down\u off),
字符串.valueOf(R.drawable.ic_level07));
//更多。在这里添加
List controlB=新链接列表();
controlB.add(创建项(
“监视器003CK”,
“功能性”,
"29", 
字符串值(R.drawable.ic_up),
字符串.valueOf(R.drawable.ic\u down\u off),
字符串.valueOf(R.drawable.ic_level07));
//更多。在这里添加
SeparatedListAdapter=新的SeparatedListAdapter(此);
adapter.addSection(
“控制1”,
新SimpleAdapter(
这
controlA,
R.布局图、设备图,
新字符串[]{
项目名称,
项目(u)国家,,
项目_温度,
第(一)项,
项目(下),
项目_级别},
新int[]{
R.id.tide\u行\u标题,//TextView
R.id.tide\u行\u状态,//TextView
R.id.tide\u row\u temperature,//TextView
R.id.tide\u row\u img\u up,//图像视图
R.id.tide\u row\u img\u down,//图像视图
R.id.tide\u row\u img\u level}//图像视图
)
);  
adapter.addSection(
“控制2”,
新SimpleAdapter(
这
控制B,
R.布局图、设备图,
新字符串[]{
项目名称,
项目(u)国家,,
项目_温度,
第(一)项,
项目(下),
项目_级别},
新int[]{
R.id.tide\U row\U标题,
R.id.tide_row_州,
R.id.潮汐、排潮、温度、,
R.id.tide_row_img_向上,
R.id.tide_row_img_down,
R.id.tide_row_img_level}
)
);  
this.getListView().setAdapter(适配器);
}  
}
所有这些简单性造就了这个伟大的屏幕:


我认为GPLv3的主要目标之一是防止人们利用他们在早期版本中发现的漏洞,所以我认为这是不可能的

如果这对您来说是一个阻碍,那么可能值得联系Jeff,看看您是否可以以不同的条款授权代码-将GPL应用于代码并不会阻止作者/版权持有者以不同的许可证提供代码

也就是说,如果您覆盖扩展/折叠行为,您是否可以执行几乎相同的任务

希望这有帮助


菲尔·莱洛(Phil Lello)

好的,我设法让它工作了。我得到了体育老师的帮助