0

可能かどうかわからないものを作ろうとしています。フラグメントタブがあり(フラグメントタブコンテナとしてFragmentActivity、TabHost、TabWidgetを使用)、各フラグメントにトップバーとして別のフラグメントがあります。これは、アイテムのタイプで構成された下部のバーと、フィルターとなる上部のバーとして見ることができます。通常のジェスチャーでフィルター間をスナップしたい。

私のアプリの動作は次のとおりです。最初のフラグメントが存在する主なアクティビティを確認できます。上部/下部のバーは表示されますが、最初の上部のバーカテゴリのビュー(フラグメント)は表示されません。他のカテゴリにスナップしようとしても、何も起こりません。

フラグメントのコードは次のとおりです。

Public class Tab1Fragment extends Fragment {

private ViewPager _mViewPager;
private ViewPagerAdapter _adapter;
private View child;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (container == null) {
        return null;
    }

    child = inflater.inflate(R.layout.tab_frag1_layout, container);

    _mViewPager = (ViewPager) child.findViewById(R.id.viewPager);
    _adapter = new ViewPagerAdapter(GlobalContext.getAppContext(),getFragmentManager());
    _mViewPager.setCurrentItem(0);

    new setAdapterTask().execute();

    return (LinearLayout) inflater.inflate(R.layout.tab_frag1_layout,
            container, false);
}

private class setAdapterTask extends AsyncTask<Void, Void, Void> {
    protected Void doInBackground(Void... params) {
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        _mViewPager.setAdapter(_adapter);
        _mViewPager.setCurrentItem(0);
    }
}

public void onActivityCreated(Bundle bdl) {
    super.onActivityCreated(bdl);

    _mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageScrollStateChanged(int position) {
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageSelected(int position) {
            // TODO Auto-generated method stub
            switch (position) {
            case 0:
                child.findViewById(R.id.first_tab).setVisibility(
                        View.VISIBLE);
                child.findViewById(R.id.second_tab)
                        .setVisibility(View.GONE);
                break;

            case 1:
                child.findViewById(R.id.first_tab).setVisibility(View.GONE);
                child.findViewById(R.id.second_tab).setVisibility(
                        View.VISIBLE);
                break;
            }
        }

    });

}

}

これは、外部フラグメントのxmlです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:orientation="vertical" >  

<TableLayout
    style="@style/layout_f_w"
    android:stretchColumns="*" >
    <TableRow
        android:id="@+id/tableRow1"
        android:background="#dddddd"
        style="@style/layout_wrap">

          <!-- First Tab -->
            <LinearLayout
            style="@style/layout_f_w"
            android:id="@+id/first_text"
            android:orientation="vertical" >

                  <TextView
                    android:id="@+id/textView1"
                    style="@style/text_title"
                    android:text="Tab1" />
           </LinearLayout>

        <!-- Second Tab -->
            <LinearLayout
            style="@style/layout_f_w"
            android:id="@+id/second_text"
            android:orientation="vertical" >

                <TextView
                    android:id="@+id/textView1"
                    style="@style/text_title"
                    android:text="Tab2" />

           </LinearLayout>

    </TableRow>
 </TableLayout>
 <!-- Include Tab Indicator  -->
 <include layout="@layout/indicator" android:layout_width="fill_parent"
  android:layout_height="wrap_content"  />

<android.support.v4.view.ViewPager
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:id="@+id/viewPager" />
</LinearLayout>

これは私の最初のカテゴリフラグメント(最初のフラグメント内にあるフラグメントカテゴリ)の例です。

public class LayoutOne extends Fragment {


public static Fragment newInstance(Context context) {
    LayoutOne f = new LayoutOne();  

    return f;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_one, null);       
    return root;
}

}

私を助けてください :(

これは私のフラグメントアダプタです:

public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private Context _context;

public ViewPagerAdapter(Context context, FragmentManager fm) {
    super(fm);  
    _context=context;

    }
@Override
public Fragment getItem(int position) {
    Fragment f = new Fragment();
    switch(position){
    case 0:
        f=LayoutOne.newInstance(_context);  
        break;
    case 1:
        f=LayoutTwo.newInstance(_context);  
        break;
    }
    return f;
}
@Override
public int getCount() {
    return 2;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    // TODO Auto-generated method stub
    return false;
}

}
4

2 に答える 2

3

最後に、4.2 と互換性でフラグメントをネストしましたhttp://developer.android.com/about/versions/jelly-bean.html

于 2012-10-17T20:52:08.153 に答える
0

そして、私が欲しいフラグメントのそれぞれに、トップバーとして、別のフラグメントがあります

フラグメント内にフラグメントを含めることはサポートされていません。申し訳ありません。

更新:ネストされたフラグメントは、Android 4.2(およびAndroid Support Library rev 11)以降でサポートされています:http://developer.android.com/about/versions/android-4.2.html#NestedFragments

于 2012-10-17T19:27:31.983 に答える