我有一个Fragment类型的getItem(int position)方法。我有大约100页,这意味着每个页面都不同我试图使用switch和case语句。每个case返回一个新类,它扩展Fragment,如下所示。
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语句,这将花费很长时间。感谢
答案 0 :(得分: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];
}
}
答案 1 :(得分:1)
您希望使用函数
创建对象Page getPage(){
return new Page();
}
我假设每个页面都有自己的属性,可能是字符串或其他什么。因此,您可以将这些值存储在ArrayList<String>
中,并根据索引
Page getPage(int index){
Page p = new Page();
String attr = youArrayList.get(index);
p.setAttrMethod(attr);
return p;
}