0

我有一个片段类型的 getItem(int position) 方法。我有大约 100 多页,这意味着我尝试使用 switch 和 case 语句的每一页都不同。每个案例都返回一个扩展片段的新类,如下所示。

public class Pages{
public static class Page1 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.fragment_main_dummy,
            container, false);
    final Button search = (Button) rootView.findViewById(R.id.clicktosearch);
    final EditText number = (EditText)rootView.findViewById(R.id.number);
    search.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for(int i = 0; i < MainActivity.Help.arr.length; i++){
                if(number.getText().toString().equals(MainActivity.Help.arr[i])){ 
                    MainActivity.mViewPager.setCurrentItem(i);
                }
            }
        }
    });
    WebView webview = (WebView) rootView
            .findViewById(R.id.webview);
    webview.loadUrl("file:///android_asset/2.html");
    return rootView;
      }

   }
}
public Fragment getItem(int position) {
    switch(position){
    case 1:
        Pages.Page1 page1 = new Pages.Page2();
        return page1; //same with other pages in different cases.

有没有比使用 switch/case 语句更容易做到这一点的方法,这将花费很长时间。谢谢

4

2 回答 2

1

是的。有一种更简单的方法

Page createPage(int index)
{
    // ignore the damn index
    return new Page();
}

将执行您的功能正在执行的相同操作。由于您似乎没有做任何事情来保存存储正在创建的页面的变量。

另一方面,如果想将它存储在某个地方,你可以在类中拥有一个数组(这个函数存在的地方)——比如这个类是一本书。

public class Book
{
    private Page [] p;

    public Book()
    {
        p = new Page[1000];
        for(int i = 0; i < 1000; ++i)
            p[i] = new Page();
    }

    public Page createPage(int index)
    {
        return p[index];
    }
}

或者懒惰的初始化

public class Book
{
    private Page [] p;

    public Book()
    {
        p = new Page[1000];
    }

    public Page createPage(int index)
    {
        if (p[index) != null)
            return p[index];

        p[index] = new Page();
        return p[index];
    }
}
于 2013-04-01T17:03:55.380 回答
1

你想用函数创建对象

Page getPage(){
    return new Page();
}

我假设每个页面都有它自己的属性,可能是一个字符串或其他什么。因此,您可以将这些值存储在 an 中ArrayList<String>并根据索引将它们设置为页面

Page getPage(int index){
    Page p = new Page();
    String attr = youArrayList.get(index);
    p.setAttrMethod(attr);
    return p;
}
于 2013-04-01T17:27:14.830 回答