使用带有J. Sharkey的SeparatedListAdapter的分段ListView的许可证问题

时间:2011-04-16 02:04:23

标签: android listview licensing adapter sections

重要的解释(更安全......),如果您不想全部阅读,请以粗体显示问题。非常感谢你的帮助!

我有一个带有ListView的应用和两个自定义XML。一个是单个TextView,用于标题。另一个有3个TextView和3个表示数据的ImageView。

正如大多数人所知,Jeff Sharkey已经有very clever (imho) solutionSeparatedListAdapter),它允许该类无需修改即可使用ImageViews。虽然它接受String s,但我可以提供可绘制int资源的valueOf,并且它会解决它。太棒了,最后看代码和屏幕(他的课程不是为了简单起见)。

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

现在,我已经能够找到cwac-merge,这是ASL 2.但到目前为止,我无法将字符串和drawables“映射”到自定义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);  

}  

}

所有这些简单性都会导致这个伟大的屏幕:

Jeff Sharkey's implementation of Sectioned ListViews

2 个答案:

答案 0 :(得分:1)

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

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

那就是说,如果你覆盖展开/折叠行为,那么ExpandableListAdapterExpandableListView几乎不会做同样的工作吗?

希望这有帮助,

Phil Lello

答案 1 :(得分:0)

好的,我设法使用cwac-merge使其工作。我得到了人here的帮助。

我不会重新发明轮子,所以你们都可以在那里读取信息(包括使用的代码)。如果需要,我可以澄清一下。请问,我会帮忙。