ViewPager with Fragment Android(Func <t,t,t>替代Java(Android))

时间:2016-07-04 01:28:52

标签: java c# android-fragments android-viewpager xamarin.android

我正在使用Tab Layout&amp;查看包含一些视图的寻呼机。

我为Xamarin Android开发了项目,现在我想用Android Studio创建。

我已经像以前的项目一样实现了FragmentPagerAdapter,但问题是在Fragment类中使用Func。

我以前的班级是这样的:

public class SelectDateViewFragment : Android.Support.V4.App.Fragment
{
    readonly Func<LayoutInflater, ViewGroup, Bundle, View> view;

    public SelectDateViewFragment(Func<LayoutInflater, ViewGroup, Bundle, View> _view)
    {
        view = _view;
    }

    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        // return inflater.Inflate(Resource.Layout.YourFragment, container, false);
        base.OnCreateView(inflater, container, savedInstanceState);
        return view(inflater, container, savedInstanceState);
    }
}

我能够创建片段并像这样添加到FragmentList:

viewPagerAdapter.addFragmentView((i, v, b) =>
              {
                  var view = i.Inflate(Resource.Layout.SelectDateRecyclerViewLayout, v, false);

那么,您建议在我的Activity中使用相同的逻辑?

感谢。

1 个答案:

答案 0 :(得分:0)

好的问题已由我自己解决了。

基本上我已经用必要的参数实现了Func到Java。

1)创建界面

public interface Func<B,N,K, View> {
View invoke(B arg1,N arg2,K arg3);

}

2)实现接口

class FuncImpl<B,N,K, View> implements Func<B,N,K, View> {
Func<B,N,K, View> function;
public FuncImpl(Func<B,N,K, View> function) {
    this.function = function;
}
@Override
public View invoke(B arg1,N arg2,K arg3) {
    return this.function.invoke(arg1, arg2, arg3);
}}

3)在Fragment中使用class

public class SelectDateViewFragment extends Fragment {

Func<LayoutInflater,ViewGroup,Bundle,View> view;

public SelectDateViewFragment( Func<LayoutInflater,ViewGroup,Bundle,View> view){
    this.view = view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater,  ViewGroup container,  Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    return view.invoke(inflater,container,savedInstanceState);

}}

4)设置ViewPager适配器

 selectDateAdapter = new SelectDateAdapter(getSupportFragmentManager(),charSequences);

    selectDateAdapter.addFragmentView(new Func<LayoutInflater, ViewGroup, Bundle, View>() {
        @Override
        public View invoke(LayoutInflater arg1, ViewGroup arg2, Bundle arg3) {
            View view = arg1.inflate(R.layout.layout_select_date_recyclerview,arg2,false);
            return view;
        }
    });

    viewPagerView.setAdapter(selectDateAdapter);

因此,此解决方案并不常见,但使流程变得非常简单。