3

以前、2 つのレイアウトを持つスワイプ タブ ビューでこのコードを使用したことがありますが、問題なく動作します。

public class MainActivity extends FragmentActivity {
/**
 * The {@link android.support.v4.view.PagerAdapter} that will provide
 * fragments for each of the sections. We use a
 * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
 * will keep every loaded fragment in memory. If this becomes too memory
 * intensive, it may be best to switch to a
 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
 */
SectionsPagerAdapter mSectionsPagerAdapter;

/**
 * The {@link ViewPager} that will host the section contents.
 */
ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);




}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a DummySectionFragment (defined as a static inner class
        // below) with the page number as its lone argument.
        Fragment fragment = new DummySectionFragment();
        Bundle args = new Bundle();
        args.putInt(DummySectionFragment.ARG_OBJECT, position);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        // Show 2 total pages.
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
        case 0:
            return getString(R.string.title_section1).toUpperCase(l);
        case 1:
            return getString(R.string.title_section2).toUpperCase(l);
        }
        return null;
    }
}

/**
 * A dummy fragment representing a section of the app, but that simply
 * displays dummy text.
 */
public static class DummySectionFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    public static final String ARG_SECTION_NUMBER = "section_number";
    public static final String ARG_OBJECT = "object";
    public DummySectionFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        Bundle args = getArguments();
        int position = args.getInt(ARG_OBJECT);

        int tabLayout = 0;
        switch (position) {
        case 0:
        tabLayout = R.layout.tab_new;
        break;
        case 1:
        tabLayout = R.layout.tab_summary;
        break;

        }

        View rootView = inflater.inflate(tabLayout, container, false);

        return rootView;
    }
}
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

    case R.id.action_settings:
        Intent i = new Intent(this, SettingsActivity.class);
        startActivity(i);
    }

    return true;
}

}

そのために、2 つの xml ファイルを作成し、タブが正しく配置されたときにそれらを初期化しました。ただし、今は2つのタブが必要ですが、2番目のタブはリストでなければなりません。どうすればいいのかわかりません。listFragment を拡張してみましたが、resource not found でクラッシュしました。私は長い間立ち往生しています、誰か助けてください。私はよくグーグルで検索し、すべての例を見ましたが、タブ内でリストを作成する方法とそれを呼び出す方法を示しているものはありませんでした。

これが私が今持っているものです

public class MainActivity extends FragmentActivity {
SimpleListFragment x = new SimpleListFragment();
/**
 * The {@link android.support.v4.view.PagerAdapter} that will provide
 * fragments for each of the sections. We use a
 * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
 * will keep every loaded fragment in memory. If this becomes too memory
 * intensive, it may be best to switch to a
 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
 */
SectionsPagerAdapter mSectionsPagerAdapter;

/**
 * The {@link ViewPager} that will host the section contents.
 */
ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a DummySectionFragment (defined as a static inner class
        // below) with the page number as its lone argument.
        Fragment fragment = new DummySectionFragment();
        Bundle args = new Bundle();
        args.putInt(DummySectionFragment.ARG_OBJECT, position + 1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
        case 0:
            return getString(R.string.title_section1).toUpperCase(l);
        case 1:
            return getString(R.string.title_section2).toUpperCase(l);
        }
        return null;
    }
}

/**
 * A dummy fragment representing a section of the app, but that simply
 * displays dummy text.
 */
public static class DummySectionFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    public static final String ARG_SECTION_NUMBER = "section_number";
    public static final String ARG_OBJECT = "object";
    public DummySectionFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        Bundle args = getArguments();
        int position = args.getInt(ARG_OBJECT);

        int tabLayout = 0;
        switch (position) {
        case 0:
        tabLayout = R.layout.tab_home;
        break;
        case 1:
            SimpleListFragment simpleListFragment = new SimpleListFragment();

        break;

        }

        View rootView = inflater.inflate(tabLayout, container, false);

        return rootView;
    }
}

}

4

2 に答える 2

5

DummySectionFragment で ListFragment を作成している ATM。それは正しくありません。

ここにそれを行う1つの方法があります。最高ではありませんが、理解するのは良いことです。

メイン アクティビティでフラグメントを作成し、アダプターに渡します。DummyListFragment は、ListFragment から派生した新しいクラスです。ここで重要なのは、使用する XML レイアウトに、ID @android:id/list を持つ ListView が含まれていることです。(したがって、フラグメントは、使用する必要がある/使用できるリストビューを理解できます。

public class MainActivity extends FragmentActivity {

SectionsPagerAdapter mSectionsPagerAdapter;

ViewPager mViewPager;

List<Fragment> mFragments;


@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

 mFragments = new ArrayList<Fragment>();
 mFragments.add(new DummySectionFragment();
 mFragments.add(new DummyListFragment();

  mSectionsPagerAdapter = new SectionsPagerAdapter(
        getSupportFragmentManager(), mFragments);

...

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    List<Fragment> fragmentList;

    public SectionsPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        fragmentList = fragments;
    }

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

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = fragmentList.get(position);        
        return fragment;
    }

. .

public static class DummyListFragment extends ListFragment {

public DummyListFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    return inflater.inflate(R.layout.my_list_fragment, container, false);
}
于 2013-07-28T06:18:39.623 に答える
0

では、見てみましょう。

  1. DummySectionFragmentクラスを完全に削除する

  2. 2 つの個別のフラグメントを作成します。1 つはあなたのためListView、もう 1 つは。それらが機能していることを確認してください。Eclipse によって生成されたコードはサポート ライブラリの Fragment クラスを使用するため、Fragments は からではなくからFragment(またはListFragment) クラスを拡張する必要があります。必ず正しいものをインポートしてください。android.support.v4.appandroid.app

  3. の実装を変更しますFragmentPagerAdapter

    public class MyPagerAdapter extends FragmentPagerAdapter
    {
        public MyPagerAdapter(FragmentManager fm)
        {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int pos)
        {
            // return instances of your custom fragments
            // tab 0: list
            // tab 1: other
            // (for more than 2 tabs use a switch statement instead)
            return (position == 0) ? new MyListFragment() : new MyOtherFragment();
        }
    
        @Override
        public int getCount()
        {
            // Defines the number of tabs shown and positions that getItem() should handel
            return 2;
        }
    
        @Override
        public CharSequence getPageTitle(int position)
        {
            // define the titles for your tabs in the strings.xml resource
            switch (position)
            {
                case 0: return getString(R.string.tab_fragment_title);
                case 1: return getString(R.string.other_fragment_title);
            }
    
            return null;
        }
    }
    
  4. 新しいアダプターを使用します。

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        // Create your adapter and pass the support fragment manager
        MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
    
        // Set up the ViewPager with your pager adapter
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(adapter);
    }
    
于 2013-07-29T03:00:01.003 に答える