2

私の問題は、フラグメントと ActionBar (android.support.v7.app.ActionBar) に関するものです。

この例、特にセクション「ナビゲーションタブの追加」に従いました

この例は問題なく動作しますが、タブのコンテンツ (フラグメント) を別のフラグメントに変更したい場合に問題が発生します。

この例では、最初のフラグメント「Tab_Fragment_1」(最初のタブの下) に 1 つのボタンを追加しました。ボタンが押されると、明らかに同じタブの下でコンテンツを変更したい(したがって、別のフラグメントをロードします)。

MainActivity に、tab_fragment_1'layout で定義されているメソッド「clickbutton」を追加しました

従うべきパターンがわかりません。どうすればいいですか?

以下は私のコードです:

主な活動

    public class MainActivity extends ActionBarActivity {

    private String TAG="MainActivity";

    Tab tab =null;

    Tab_Fragment_2A tab_Fragment_2A=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "msg-1");


        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.setDisplayShowTitleEnabled(false);

        tab = actionBar.newTab()
                           .setText(R.string.tab_1)
                           .setTabListener(new TabListener<Tab_Fragment_1>(
                                   this, "tab_1", Tab_Fragment_1.class));
        actionBar.addTab(tab);

        tab = actionBar.newTab()
                .setText(R.string.tab_2)
                .setTabListener(new TabListener<Tab_Fragment_2>(
                        this, "tab_2", Tab_Fragment_2.class));
        actionBar.addTab(tab);

        tab = actionBar.newTab()
                .setText(R.string.tab_3)
                .setTabListener(new TabListener<Tab_Fragment_3>(
                        this, "tab_3", Tab_Fragment_3.class));
        actionBar.addTab(tab);



    }

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

    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 clickbutton(View v) {
        Log.d(TAG, "button clicked");

        //to do?


    }


}

activity_main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
</RelativeLayout>

Tab_Fragment_1 クラス:

public class Tab_Fragment_1 extends Fragment{


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.tab_fragment_1,container, false);
        return view;
    }



}

tab_fragment_1:

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

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="clickbutton" />

</LinearLayout>
4

0 に答える 0