【问题标题】:Creating a custom Abstract class of ArrayAdapter创建 ArrayAdapter 的自定义抽象类
【发布时间】:2014-02-03 15:15:18
【问题描述】:

我想创建自己的 ArrayAdapter 抽象版本,它添加了自定义 Intent Navigation 和 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;
    }   
}

然后在我的活动中,我只是从RBActivity 扩展而不是Activity。然后我可以调用 this.navigate().toSomeActivity();使用我的Navigator class,它具有轻松创建意图以在我的应用程序中导航的方法。我也有自己的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&lt;?&gt; 的操作,但它显然不起作用...

我想简而言之,我问的是如何在尖括号中接受泛型类类型

非常感谢任何帮助,干杯

编辑:在查看 ArrayAdapter.java (https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.java) 之后,我认为我需要的是 ArrayAdapter&lt;T&gt; 语法。现在调查一下

【问题讨论】:

    标签: java android class android-arrayadapter abstract


    【解决方案1】:

    如果我理解正确,您只需要语法即可。试试这个:

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

    然后,当您实例化您的 RBArrayAdapter 子类(类似这样)时,您应该能够用您喜欢的任何参数替换 &lt;T&gt;

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

    玩得开心。

    【讨论】:

    • 干杯是的,在看到它是如何在 ArrayAdapter.java (github.com/android/platform_frameworks_base/blob/master/core/…) 中完成后,我实际上意识到了这一点,请参阅编辑
    • 是的,我在提交答案后看到了您的编辑,但那时我已经承诺了。此外,我不需要太多的借口来编写代码。 :) 很高兴你知道了!
    • 感谢您现在完美地工作,只需在使用 ArrayAdapters 时使用类似的东西 - public class ChatArrayAdapter extends RBArrayAdapter&lt;Article&gt; implements AsyncTaskCompleteListener, ActionBar.OnNavigationListener { 就像买的一样工作:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多