我想创建我自己的 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/