2013-02-13 95 views
1

我需要使用Fragment添加ViewPager到我的主要活动的一部分,该活动延伸到TabActivity。 为此,我创建了一个ViewPagerActivity类,它扩展了FragmentActivity,从这里添加了调用FragmentAdapter,创建了包含我想创建的视图的Fragment。 但是我面临的问题是我无法让我的主类在我的主要活动上创建viewpager。无法在活动中使用viewpager创建片段。

我认为问题出在我打电话给我的主班级ViewPagerActivity,这不能创建fragment来创建viewpager

请帮助我在这里呆了差不多一个月了,我尝试的每个解决方案都失败了。 这些代码在单独项目中分开实现时运行完美,但在我的项目中实现时似乎不会执行。

ViewPagerActivity类

class ViewPagerClass extends FragmentActivity implements OnClickListener 
    { 
      TestFragmentAdapter mAdapter; 
      ViewPager mviewpager; 
      CirclePageIndicator mIndicator; 
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
       mAdapter = new TestFragmentAdapter(getSupportFragmentManager()); 
       mviewpager = new ViewPager(getApplicationContext()); 
       mviewpager.setId(R.id.viewPager); 
       mviewpager.setAdapter(mAdapter); 
       mIndicator = (CirclePageIndicator)findViewById(R.id.indicator); 
       mIndicator.setViewPager(mviewpager); 
      } 
      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       // TODO Auto-generated method stub 
      } 
     } 

TestFragmentAdapter.java

class TestFragmentAdapter extends FragmentPagerAdapter implements IconPagerAdapter { 
    protected static final String[] CONTENT = new String[] { "This", "Is", "A", "Test"}; 
    protected static final int[] ICONS = new int[] {}; 
    private int mCount = CONTENT.length; 

    public TestFragmentAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return TestFragment.newInstance(CONTENT[position % CONTENT.length]); 
    } 

    @Override 
    public int getCount() { 
     return mCount; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return TestFragmentAdapter.CONTENT[position % CONTENT.length]; 
    } 

    @Override 
    public int getIconResId(int index) { 
     return ICONS[index % ICONS.length]; 
    } 

    public void setCount(int count) { 
     if (count > 0 && count <= 10) { 
      mCount = count; 
      notifyDataSetChanged(); 
     } 
    } 

TestFragment.java

public final class TestFragment extends Fragment { 
    private static final String KEY_CONTENT = "TestFragment:Content"; 
    static TestFragment fragment = new TestFragment(); 
    public static TestFragment newInstance(String content) { 
     StringBuilder builder = new StringBuilder(); 
     builder.append(content).append("\n"); 
     fragment.mContent = builder.toString(); 
     return fragment; 
    } 
    private String mContent = "???"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) { 

      mContent = savedInstanceState.getString(KEY_CONTENT); 
     } 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.pagerframe, container); 
     LayoutParams textparam = new LayoutParams(130,40); 
     TestView text = new TextView(getActivity()); 
     text.setText(mContent); 
     text.setTextColor(Color.WHITE); 
     LinearLayout layout = (LinearLayout) view.findViewById(R.id.pager_ll); 
     layout.setBackgroundColor(Color.BLUE); 
     layout.setVisibility(View.VISIBLE); 
     layout.setGravity(Gravity.CENTER); 
     layout.setOrientation(LinearLayout.VERTICAL); 

     layout.addView(text,textparam); 
     return layout; 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putString(KEY_CONTENT, mContent); 
     } 
} 

回答

0

代码终于在这里和那里几乎没有变化。我想在这里添加它们来帮助其他开发者解决与我相同的问题。

我需要添加一个ViewPager使用片段到我的主要活动的一部分,它扩展了TabActivity。为此我创建了一个扩展FragmentActivity的ViewPagerActivity类,从这里它添加了调用FragmentAdapter,它创建了包含我想创建的视图的Fragment。但是我面临的问题是我无法让我的主要课程在我的主要活动中创建viewpager。

  • 首先,我是不是能延长多类,因为我需要两个FragmentTabActivity
  • 我发现的地方,我们可以扩展Tab的功能也为收听。以下是我做的:

    public class Main extends FragmentActivity implements OnClickListener,TabContentFactory{ } 
    
  • 然后我写的代码在我ViewPagerActivity类为Main

  • 我想这是主要的问题。不管怎么说,我改变了代码TestFragment类来创建Bundle这样

    public static TestFragment newInstance(String content) { 
        TestFragment fragment = new TestFragment(); 
        Bundle args = new Bundle(); 
        args.putString("content", content); 
        fragment.setArguments(args); 
        return fragment; 
    } 
    
    
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        // the if clause wasnot working for me 
        mContent = getArguments().getString("content"); 
    } 
    
    • 改为onCreate返回视图而非布局,我错过了早期

      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.pagerframe, container,false); 
      LayoutParams textparam = new LayoutParams(LayoutParams.FILL_PARENT,30); 
      TestView text = new TextView(getActivity()); 
      text.setText(mContent); 
      text.setTextColor(Color.WHITE); 
      LinearLayout layout = (LinearLayout) view.findViewById(R.id.pager_ll); 
      layout.setVisibility(View.VISIBLE); 
      layout.setGravity(Gravity.CENTER); 
      layout.setOrientation(LinearLayout.VERTICAL); 
      layout.addView(edtext,textparam); 
      return view; 
      } 
      
    • 在此之后一切运作良好。

1

你已经忘了设置您的内容视图初始化你ViewPager如寻呼机查看后,因此请设置是您的内容视图

setContentView(mviewpager); 
+0

感谢您的帮助,但viewpager仅仅是一个主视图的一部分,甚至当我使用addView(mviewpager)它因此未工作。 – 2013-02-15 06:31:03

+1

如果视图分页器只是它的一部分,它很容易在xml文件中定义。 Bdw你的代码应该返回包含TextView的视图,该视图应该显示你的mContent(检查你的mcontent天气是空的还是空的,如果你的视图不显示的话);我建议你先设置一个静态文本 – 2013-02-15 06:39:38

+0

是的,我错过了,谢谢。 – 2013-03-05 12:16:51