Android 无法在活动中使用viewpager创建片段。

Android 无法在活动中使用viewpager创建片段。,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我需要使用Fragment将ViewPager添加到扩展TabActivity的主要活动部分。 为此,我创建了一个viewPageActivity类,该类扩展了FragmentActivity,从这里它添加了FragmentAdapter调用,该调用创建了Fragment,其中包含我要创建的视图。 但我面临的问题是,我无法让我的主类在我的主要活动上创建viewpager 我想问题是当我在我的主类上调用类ViewPagerActivity时,它不能创建片段来创建viewpager 请帮帮我,我已经

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

我想问题是当我在我的主类上调用类
ViewPagerActivity
时,它不能创建
片段来创建
viewpager

请帮帮我,我已经陷入这个困境将近一个月了,我尝试的每个解决方案都失败了。 这些代码在单独的项目中单独实现时运行良好,但在我的项目中实现时似乎无法执行

ViewPageActivity类

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();
        }
    }

您忘记了设置内容视图,所以在初始化ViewPager后设置您的内容视图,因为ViewPager是您的内容视图

setContentView(mviewpager);

您忘记了设置内容视图,所以在初始化ViewPager后设置您的内容视图,因为ViewPager是您的内容视图

setContentView(mviewpager);

代码最终在这里和那里进行了一些更改。我想在这里添加它们,以帮助其他开发人员解决与我相同的问题

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

  • 首先,我无法扩展多个类,因为我需要
    Fragment
    TabActivity
  • 我找到了一个可以扩展
    选项卡
    功能的地方,也可以作为监听器。我是这样做的:

    public class Main extends FragmentActivity implements OnClickListener,TabContentFactory{ }
    
  • 然后,我将类
    viewPageActivity
    中的代码写入
    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;
      }
      
    • 在这之后,一切都很顺利


代码最终运行起来,只是做了一些改动。我想在这里添加它们,以帮助其他开发人员解决与我相同的问题

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

  • 首先,我无法扩展多个类,因为我需要
    Fragment
    TabActivity
  • 我找到了一个可以扩展
    选项卡
    功能的地方,也可以作为监听器。我是这样做的:

    public class Main extends FragmentActivity implements OnClickListener,TabContentFactory{ }
    
  • 然后,我将类
    viewPageActivity
    中的代码写入
    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;
      }
      
    • 在这之后,一切都很顺利


谢谢您的帮助,但是viewpager只是主视图的一部分,即使我使用addView(mviewpager)它也不起作用。如果viewpager只是一部分,那么很容易在xml文件中定义。Bdw您的代码应该返回包含TextView的视图,该视图应该显示您的mContent(检查您的mContent是空的还是空的,如果是这样,您的视图什么也不显示);我建议您先设置一个静态文本谢谢您的帮助,但是viewpager只是主视图的一部分,即使我使用addView(mviewpager)它也不起作用。如果viewpager只是一个部分,那么很容易在xml文件中定义。Bdw您的代码应该返回包含TextView的视图,该视图应该显示您的mContent(检查您的mContent是空的还是空的,如果是这样,您的视图什么也不显示);我建议您先设置一个静态文本