2016-11-22 2 views
1

Я использую butterknife в фрагменте. У меня есть 2 двух ViewPagers, которые находятся в header.xml. И я не хочу использовать findViewById() для их создания. Я пытался использовать ButterKnife.bind(this,header), но это не позволяет мне связывать дважды. Есть ли способ решить этот случай?Как связать динамические представления в фрагменте?

(простите за мое плохое выражение, английский не является моим родным языком)

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View inflate = inflater.inflate(R.layout.fragment_a, null); 
     ButterKnife.bind(this, inflate); 

     View header = LayoutInflater.from(getActivity()).inflate(R.layout.header, null); 
     mPagerMenu = (ViewPager) header.findViewById(R.id.pager_menu); 
     mPagerAd = (ViewPager) header.findViewById(R.id.pager_ad); 

     return inflate; 
    } 
+0

Попробуйте 'ButterKnife.bind (getActivity());' – Bills

ответ

0

Да, забудьте про нож для масла и использовать MVVM (Databinding): https://developer.android.com/topic/libraries/data-binding/index.html. В длинном выстреле это лучшее решение. С ней просто создать две модели просмотра, два вида и два привязок

+0

Постараюсь это! спасибо –

1

попробовать этот

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View inflate = inflater.inflate(R.layout.fragment_a, null); 

     View header = LayoutInflater.from(getActivity()).inflate(R.layout.header, null); 

     ButterKnife.bind(this, header); 
     mPagerMenu = (ViewPager) header.findViewById(R.id.pager_menu); 
     mPagerAd = (ViewPager) header.findViewById(R.id.pager_ad); 

     return inflate; 
    } 

Примечание: - Вы можете связывать только один макет в то время ......

+0

спасибо, но у меня также есть взгляды в моем фрагменте_a.xml. если привязать заголовок, то мне все равно придется использовать findViewById для создания представлений в файле fragment_a.xml –

+0

Butterknife привязывает весь вид с макетом, и если он не найдет никакого представления, то он даст вам некоторую ошибку ..... – sushildlh

+0

и если вы хотите чтобы связать 2 разных вида, вам нужно перейти с помощью 'findViewById()'. Это невозможно с Butterknife ........... – sushildlh

0

В onCreateView вы можете привязывать только один вид, потому что вам нужно будет отредактировать один вид.

ButterKnife.bind(this, inflate); 
return inflate; 

Затем вы можете использовать раздувать объявить другой вид, как ....

mPagerMenu = (ViewPager) inflate.findViewById(R.id.pager_menu); 
mPagerAd = (ViewPager) inflate.findViewById(R.id.pager_ad); 
+0

Я не могу поместить 2 пейджера в свой основной файл fragment_a.xml, потому что они являются headerViews ListView. Спасибо в любом случае, теперь я понимаю, что невозможно раздуть два разных взгляда одновременно –

1

И я не хочу использовать findViewById()

Инициализировать Ваше мнение id by @BindView (R.id.yourViewId) после этих аннотаций больше не нужно findViewById.

@BindView(R.id.pager_menu) ViewPager pagerMenu; 
    @BindView(R.id.pager_ad) ViewPager pagerAd; 

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fancy_fragment, container, false); 
    ButterKnife.bind(this, view); 
    // TODO Use fields... 
    return view; 
    } 

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

  • Нет связанных вопросов^_^