如何绑定片段中的动态视图?

时间:2016-11-22 10:47:34

标签: android android-fragments android-view butterknife

我在一个片段中使用了刀。我在header.xml中有两个ViewPagers。 而且我不想使用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;
    }

4 个答案:

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

注意: - 您一次只能绑定一个布局......

答案 1 :(得分:1)

  

我不想使用findViewById()

通过 @BindView(R.id.yourViewId)初始化您的视图ID后,这些注释不再需要 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;
  }

答案 2 :(得分:0)

是的,忘了Butterknife并使用mvvm(数据绑定):https://developer.android.com/topic/libraries/data-binding/index.html。从远景来看,这是一个最好的解决方案。 有了它,只需创建两个视图模型,两个视图和两个绑定

答案 3 :(得分:0)

在onCreateView中,您只能绑定一个视图,因为您必须重新调整一个视图。

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

然后你可以使用inflate来声明另一个像......一样的视图。

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