java - 创建 ArrayAdapter 的自定义抽象类

标签 java android class android-arrayadapter abstract

我想创建我自己的 ArrayAdapter 抽象版本,它添加了自定义 Intent 的功能导航和Toast弹出窗口等。

这是我的自定义 Activity 的示例:

public abstract class RBActivity extends Activity implements IActivity {

    private Navigator navigator;
    private Toaster toaster;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        navigator = new Navigator(this);
        toaster = new Toaster(this);
    }

    public Navigator navigate() {
        return navigator;
    }

    protected void popBurntToast(String msg) {
        toaster.popBurntToast(msg);
    }

    protected void popToast(String msg) {
        toaster.popToast(msg);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        navigator = null;
        toaster = null;
    }   
}

然后在我的 Activity 中,我只需从 RBActivity 扩展即可而不是Activity 。然后我可以调用 this.navigate().toSomeActivity();使用我的Navigator class它具有轻松创建 Intent 来导航我的应用程序的方法。我也有自己的RBListActivity等等

这是我的导航器类的示例方法:

public void toSiteSubscribeActivity(Site _site) {
    Intent intent = new Intent(activity, SiteSubscribeActivity.class);
    Bundle b = new Bundle();
    b.putLong(Navigator.INTENT_KEY_CHANNEL_ID, _site.getIdSite());
    b.putString(Navigator.INTENT_KEY_CHANNEL_NAME, _site.getName());
    b.putString(Navigator.INTENT_KEY_CHANNEL_DESCRIPTION, _site.getDescription());
    intent.putExtras(b);
    activity.startActivity(intent);
}    

无论如何,我也想有一个 RBArrayAdapter<> 但我不确定如何创建一个通用版本,它不需要我在 <> 大括号内指定类类型,即

public abstract class RBArrayAdapter extends ArrayAdapter<Article> {
    private Navigator navigator;
    private Toaster toaster;

    public RBArrayAdapter(Activity _activity, int _layout, ArrayList<Article> _notes) {
        super(_activity, _layout, _notes);

        navigator = new Navigator(_activity);
        toaster = new Toaster(_activity);
    }


    public Navigator navigate() {
        return navigator;
    }   
}

我尝试做类似 public abstract class RBArrayAdapter extends ArrayAdapter<?> 的事情但它显然不起作用......

我想简而言之,我问的是如何接受尖括号内的通用类类型

非常感谢任何帮助,干杯

编辑:好的,在查看 ArrayAdapter.java ( https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.java ) 之后,我想我需要的是 ArrayAdapter<T>句法。现在就来研究一下

最佳答案

如果我理解正确的话,你只需要语法就可以完成这项工作。试试这个:

public abstract class RBArrayAdapter<T> extends ArrayAdapter<T> {
    private Navigator navigator;
    private Toaster toaster;

    public RBArrayAdapter(Activity _activity, int _layout, ArrayList<T> _notes) {
        super(_activity, _layout, _notes);

        navigator = new Navigator(_activity);
        toaster = new Toaster(_activity);
    }


    public Navigator navigate() {
        return navigator;
    }   
}

那么您应该能够用您喜欢的任何参数替换 <T>当您实例化 RBArrayAdapter 子类时(类似这样):

public class MyStringArrayAdapter extends RBArrayAdapter<String> {

    public MyStringArrayAdapter(Activity _activity, int _layout, ArrayList<String> _notes) {
      super(_activity, _layout, _notes);
    }

}

玩得开心。

关于java - 创建 ArrayAdapter 的自定义抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21530909/

相关文章:

c++ - C/C++ 结构与类

java - java中的txt文件格式验证

java - 显示黑莓推送通知

java - s ParseUser.CurrentUser() 在来自客户端的 Parses 服务器上不同

android - Retrofit 2,解析json,忽略数组内部的错误数据类型

c# - 为字典中的结构赋值时出现编译错误

Python - 类型错误 : object of type '...' has no len()

java - infinispan 和 jgroups 的合并 View 不正确

java - 二分查找总是返回-1?

android - 用户或当前进程都没有 android.permission.BLUETOOTH