2014-02-03 4 views
1

Я хотел бы создать свою собственную абстрактную версию ArrayAdapter, которая добавит функциональность пользовательских Intent Навигация и Toast всплывающие окна и другие.Создание пользовательского абстрактного класса ArrayAdapter

Вот пример моей пользовательской активности:

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<?>, но это, очевидно, не работает ...

Я думаю, в общем, я спрашиваю, как принять общий тип класса в заостренный брекет

Любая помощь очень ценится, ура

EDIT: хорошо посмотрев на ArrayAdapter.java (https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.java) Я думаю, что мне нужно ArrayAdapter<T> Синтаксис. глядя на это сейчас

ответ

0

Если я правильно вас понимаю, вам просто нужен синтаксис для выполнения этой работы. Попробуйте это:

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

} 

Веселитесь.

+0

Cheers yep Я действительно понял это, посмотрев, как это делается в ArrayAdapter.java (https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.java) см. В редакции – wired00

+0

Да, я видел ваше редактирование после того, как я представил свой ответ, но в тот момент я был совершен. Кроме того, мне не нужно много поводов для написания кода. :) Рад, что ты это понял! –

+0

Спасибо, что теперь отлично работаем, просто используем что-то подобное при использовании ArrayAdapters - 'public class ChatArrayAdapter extends RBArrayAdapter

реализует AsyncTaskCompleteListener, ActionBar.OnNavigationListener {' работает так же, как купленный: P – wired00

Смежные вопросы