创建具有各种片段的新ArrayPagerAdapter

时间:2015-10-07 22:29:31

标签: android fragmentpageradapter commonsware-cwac

我正在尝试创建一个类似于此github页面https://github.com/commonsguy/cwac-pager的自述文件中显示的示例的ArrayAdapter。我有各种各样的片段,我想传递给ArrayPagerAdapter,而不是像示例中那样。我对如何将desc.getTitle传递到示例中新创建的Fragment实例感到困惑。另外我怎么能用android.app.Fragment来创建片段的新实例呢?我在下面发布了我的代码我在newInstance();

上有错误
static class SimplePagerAdapter extends ArrayPagerAdapter<android.app.Fragment>{



    public SimplePagerAdapter(FragmentManager fragmentManager,
                              ArrayList<PageDescriptor> descriptors) {
        super(fragmentManager, descriptors);
    }

    @Override
    protected android.app.Fragment createFragment(PageDescriptor desc) {

        Fragment newFragment = new JudgeMainFragment();

        return(android.app.Fragment.newInstance(desc.getTitle()));
    }
}

1 个答案:

答案 0 :(得分:0)

  

我对如何将desc.getTitle传递到示例中新创建的Fragment实例感到困惑

您的代码与我在项目README中的代码不同,因为Fragment没有newInstance()方法,因此无法使用。 README正在显示EditorFragment,具体为the EditorFragment from the sample appEditorFragment实现newInstance()方法,使用参数Bundle将标题添加到片段中:

package com.commonsware.cwac.pager.demo;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

public class EditorFragment extends Fragment {
  private static final String KEY_TITLE="title";

  static EditorFragment newInstance(String title) {
    EditorFragment frag=new EditorFragment();
    Bundle args=new Bundle();

    args.putString(KEY_TITLE, title);
    frag.setArguments(args);

    return(frag);
  }

  @Override
  public View onCreateView(LayoutInflater inflater,
                           ViewGroup container,
                           Bundle savedInstanceState) {
    View result=inflater.inflate(R.layout.editor, container, false);
    EditText editor=(EditText)result.findViewById(R.id.editor);

    editor.setHint(getTitle());

    return(result);
  }

  public String getTitle() {
    return(getArguments().getString(KEY_TITLE));
  }
}

请注意,片段不需要知道其标题,但如果您希望片段知道其标题,请使用参数Bundle,例如通过{{ 1}} - 样式工厂方法。

  

另外,我怎样才能使用android.app.Fragment创建碎片的新实例呢?

你不会,因为newInstance()本身相当无用。您可以创建Fragment的子类来实现您的页面,就像在Android中执行任何片段一样。

  

我想要传递给ArrayPagerAdapter的各种片段而不是像示例中那样的片段

您需要根据Fragment了解如何创建正确的片段实例。这可能是通过自定义PageDescriptor实施中的int或其他内容实现的,然后您可以使用PageDescriptor中的switch