2016-05-18 4 views
0

Возможно ли иметь два разных конструктора для одного и того же Fragment?Два конструктора для фрагмента

Вот мой случай: у меня есть Fragment_A и Fragment_B, которые почти идентичны, за исключением того, что один получает Integer, а другой - String.

Могу ли я иметь что-то вроде этого:

public static VideoListFragment newInstanceA(String filterString) { 
    VideoListFragment myFragment = new VideoListFragment(); 

    Bundle args = new Bundle(); 
    args.putString(FILTER, filterString); 
    myFragment.setArguments(args); 

    return myFragment; 
} 

public static VideoListFragment newInstanceB(String subjectId) { 
    VideoListFragment myFragment = new VideoListFragment(); 

    Bundle args = new Bundle(); 
    args.putString(POSITION, subjectId); 
    myFragment.setArguments(args); 

    return myFragment; 
} 

Если это возможно, то как я буду получать в onCreate() Аргумент? Мне нужно как-то проверить, содержит ли getArguments() `FILTER String или POSITION Integer.

ответ

2

Вы не можете использовать точно такую ​​же подпись метода, чтобы различать разные типы ввода. Однако вы можете расширить входные параметры, чтобы сделать его более универсальным. Нечто подобное помогло бы:

public class VideoListFragment extends Fragment {  
    public static VideoListFragment newInstance(String type, String val) { 
     VideoListFragment myFragment = new VideoListFragment(); 

     Bundle args = new Bundle(); 
     args.putString(type, val); 
     myFragment.setArguments(args); 

     return myFragment; 
    } 
} 

, а затем использовать его, как показано ниже:

VideoListFragment frag1 = VideoListFragment.newInstance(FILTER, "value"); //for Filter 
VideoListFragment frag2 = VideoListFragment.newInstance(POSITION, "value");//for Position 
+0

Но у меня есть разные имена: 'newInstanceA' и' newInstanceB'. Будет ли это работать так? В противном случае ваш ответ будет хорошим альтернативным вариантом для меня. – Mes

+1

Да, если вы предоставляете отдельные имена, тогда это сработает, но это лишняя избыточность для такой незначительной вещи. – waqaslam

0

Android документов не рекомендует использовать конструкторы во время работы с фрагментами; вы должны использовать пакет.

+0

любая ссылка на это? – waqaslam

+0

http://stackoverflow.com/questions/9245408/best-practice-for-instantiating-a-new-android-fragment –

+0

@DEEPANKURSADANA Вы никак не можете переопределить конструктор no-args, так как он с ошибкой завершится ошибкой. Однако, если вы хотите, вы можете использовать конструктор, если он имеет один или несколько входных параметров. – waqaslam

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