android - 使用带 J. Sharkey 的 SeparatedListAdapter 的分段 ListView 的许可问题

标签 android listview licensing adapter sections

<分区>

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

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

正如你们大多数人所知,Jeff Sharkey已经有一个 very clever (imho) solution (SeparatedListAdapter),它允许类在不修改的情况下使用 ImageViews。虽然它接受 String,但我可以提供可绘制 int 资源的 valueOf,它会自行解决。太好了,请在最后查看代码和屏幕(为简单起见,他的类(class)不在此处)。

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

现在,我已经找到了 cwac-merge ,这是 ASL 2。但到目前为止,我无法将字符串和可绘制对象“映射”到自定义 XML 布局中的自定义 TextView 和 ImageView。此外,示例应用使用了一种完全不同的方法来满足我认为我远程需要的东西。

如果您想知道我在做什么,请参阅下面的 SeparatedListAdapter 和我的类(class)。对于 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

最佳答案

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

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

也就是说,不是ExpandableListAdapterExpandableListView如果覆盖展开/折叠行为,做几乎相同的工作?

希望对您有所帮助,

菲尔·莱罗

关于android - 使用带 J. Sharkey 的 SeparatedListAdapter 的分段 ListView 的许可问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684002/

相关文章:

Android - ListView 项目在选择时更改背景(可检查)

android - 使用 android 动态加载更多项目到 ListView 需要帮助

licensing - Fancybox 2 新许可证

java - 如何为canvas.drawColor生成随机数的随机颜色

java - 通过 XML 和 Java 代码使用 OnClickListener 接口(interface)有何不同?

android - 水平居中包装器 DIV 在 Android 中不起作用

java - Java 中的标点符号允许字符串比较

android - ListView 第一个元素不可点击

licensing - 如何保护应用程序免受虚拟机的复制

php - 如何开发 php 应用程序以在许可基础上进行销售或租赁?