0

こんにちは、タブ+フラグメントに問題があります。ここでは、タブを作成するクラスを持っています:

public class TestSwipeABActivity extends FragmentActivity {

FragmentTransaction transaction;
static ViewPager mViewPager;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Fragment tabOneFragment = new TabOne();
    Fragment tabTwoFragment = new TabTwo();

    PagerAdapter mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
    mPagerAdapter.addFragment(tabOneFragment);
    mPagerAdapter.addFragment(tabTwoFragment);

    //transaction = getSupportFragmentManager().beginTransaction();

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mPagerAdapter);
    mViewPager.setOffscreenPageLimit(2);
    mViewPager.setCurrentItem(0);

    mViewPager.setOnPageChangeListener(
            new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    // When swiping between pages, select the
                    // corresponding tab.
                    getActionBar().setSelectedNavigationItem(position);
                }
            });

    ActionBar ab = getActionBar();
    ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    Tab tab1 = ab.newTab().setText("Tab One").setTabListener(new TabListener<TabOne>(
                    this, "tabone", TabOne.class));

    Tab tab2 = ab.newTab().setText("Tab Two").setTabListener(new TabListener<TabTwo>(
                    this, "tabtwo", TabTwo.class));

    ab.addTab(tab1);
    ab.addTab(tab2);
}

public static class TabListener<T extends Fragment> implements ActionBar.TabListener {
    private Fragment mFragment;
    private final Activity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    /** Constructor used each time a new tab is created.
      * @param activity  The host Activity, used to instantiate the fragment
      * @param tag  The identifier tag for the fragment
      * @param clz  The fragment's Class, used to instantiate the fragment
      */
    public TabListener(Activity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    /* The following are each of the ActionBar.TabListener callbacks */

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // Check if the fragment is already initialized
        if (mFragment == null) {
            // If not, instantiate and add it to the activity
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            // If it exists, simply attach it in order to show it
            ft.attach(mFragment);
        }
    }
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // User selected the already selected tab. Usually do nothing.
    }

    public void onTabReselected(Tab arg0,
            android.app.FragmentTransaction arg1)
    {
        // TODO Auto-generated method stub

    }

    public void onTabSelected(Tab arg0, android.app.FragmentTransaction arg1)
    {
        // TODO Auto-generated method stub
        mViewPager.setCurrentItem(arg0.getPosition());
    }

    public void onTabUnselected(Tab arg0,
            android.app.FragmentTransaction arg1)
    {
        // TODO Auto-generated method stub

    }
}

public class PagerAdapter extends FragmentPagerAdapter {

    private final ArrayList<Fragment> mFragments = new ArrayList<Fragment>();

    public PagerAdapter(FragmentManager manager) {
        super(manager);
    }

    public void addFragment(Fragment fragment) {
        mFragments.add(fragment);
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mFragments.size();
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }
}

}

次に、各タブのフラグメントを次に示します。たとえば、2 つ 1 つです。

public class TabTwo extends Fragment
{

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.tabtwo, container, false);


        Button  Activity1= (Button) view.findViewById(R.id.button1);

        Activity1.setOnClickListener(new View.OnClickListener() {
              public void onClick(View view) {

                    Intent intent = new Intent().setClass(this,ABActivity.class);
                    startActivity(intent);
              }
        }); 

        return view;
    }
}

エラーは次のとおりです。The method setClass(Context, Class<?>) in the type Intent is not applicable for the arguments (new View.OnClickListener(){}, Class<ABActivity>)

コンテキストをTabTwo.this、tabtwo.getcontext.thisに変更しようとしましたが、Eclipseは.setclassNameを変更するように言っていますが、機能しません。

あなたが助けることができれば...ありがとう!!!

4

2 に答える 2

0

HI I just have a solution:

 public void onClick(View view) {
              Activity activity = getActivity();

                Intent intent = new Intent().setClass(activity, ABActivity.class);
                startActivity(intent);
          }

Explanation: "Another difference is that a Fragment is not a subclass of Context. This means that a Fragment can not be launched as a component inside your app and therefore always has to live inside of an Activity. This also means that whenever you need a Context inside of a Fragment, you need to get access to the parent Activity. You can do this by using the getActivity() method as we have done in the Fragment button's OnClickListener callback. You need to watch out because getActivity() can return null depending on where the Fragment is in the Activity's lifecycle. So, you should also include a check to see if the Activity is null before you use it."

FROM: http://neilgoodman.net/2012/01/29/working-with-fragments-on-android-part-1/

于 2013-01-24T11:54:39.330 に答える
0

これを試して

Intent intent = new Intent(getActivity(),ABActivity.class);

startActivity(intent );

于 2013-01-24T11:58:00.517 に答える