2

My project allows user can use slide menu function (on the left). On slide menu, user can select 4 items: Zero, One, Two, and Three. My project has action bar.

When user clicked Zero item, a screen is displayed. When user clicked One, Two, Three, screen is displayed and similar. One, Two, and Three Screen is designed as TabView. You can see project to understand it easier:

With Zero item it runs OK. However, I meet problem when coding One, Two, Three. When I select them, error happens. I don't know more about Fragment and Tabhost.

Here is code where I selected an any item (in MainActivity.java):

private void selectItem(int position) {
    // update the main content by replacing fragments
    switch (position) {
        case 0:
            Fragment fragment = new ZeroItem();
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, fragment).commit();
            break;
        case 1: break;
        case 2: break;
        case 3: break;
    }
}

Case 0 (it means you select Zero item, Zero Item screen is displayed) ZeroItem.java

package com.example.android.navigationdrawerexample;

import android.os.Bundle;
import android.app.Activity;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;

public class ZeroItem extends Fragment {

    public ZeroItem() {
        // Empty constructor required for fragment subclasses
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_zero_item,
                container, false);
        return rootView;
    }

}

Now, I want you help me write code in case 1, case 2, case 3. It's similar. It must call TabHost.java

Here is TabHost:
package com.ramesh.fragmenttabhostdemo;

import com.example.android.navigationdrawerexample.R;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
import android.view.Menu;

public class TabHost extends FragmentActivity {

    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.bottom_tabs);
        // mTabHost = new FragmentTabHost(this);
        // mTabHost.setup(this, getSupportFragmentManager(),
        // R.id.menu_settings);
        mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

        Bundle b = new Bundle();
        b.putString("key", "1");
        mTabHost.addTab(mTabHost.newTabSpec("1").setIndicator("1"),
                OneItem.class, b);
        //
        b = new Bundle();
        System.out.print("hello git");
        b.putString("key", "2");
        mTabHost.addTab(mTabHost.newTabSpec("2")
                .setIndicator("2"), TwoItem.class, b);
        b = new Bundle();
        b.putString("key", "3");
        mTabHost.addTab(mTabHost.newTabSpec("3").setIndicator("3"),
                ThreeItem.class, b);
        // setContentView(mTabHost);
    }

    @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;
    }
}

OneItem.java

package com.ramesh.fragmenttabhostdemo;

import com.example.android.navigationdrawerexample.R;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class OneItem extends Fragment {

    private TextView text;

    public OneItem() {
        // TODO Auto-generated constructor stub

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View v = LayoutInflater.from(getActivity()).inflate(R.layout.layout,
                null);
        text = (TextView) v.findViewById(R.id.text);
        if (getArguments() != null) {
            //
            try {
                String value = getArguments().getString("key");
                text.setText("1");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return v;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
    }
    //

}

TwoItem.java

package com.ramesh.fragmenttabhostdemo;


public class TwoItem extends OneItem {

}

ThreeItem.java

package com.ramesh.fragmenttabhostdemo;

import com.ramesh.fragmenttabhostdemo.OneItem;
import com.ramesh.fragmenttabhostdemo.TwoItem;

import android.os.Bundle;
import android.support.v4.app.FragmentTabHost;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ThreeItem extends OneItem {

    private FragmentTabHost mTabHost;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        mTabHost = new FragmentTabHost(getActivity());
        Bundle b = new Bundle();
        b.putString("key", "1");
        mTabHost.addTab(mTabHost.newTabSpec("1").setIndicator("1"),
                OneItem.class, b);
        //
        b = new Bundle();
        b.putString("key", "2");
        mTabHost.addTab(mTabHost.newTabSpec("2")
                .setIndicator("2"), TwoItem.class, b);
        return mTabHost;
    }
}

Can you download my project here.

Community
  • 1
  • 1
Van Der Cong
  • 171
  • 2
  • 13

1 Answers1

0

Use getChildFragmentManager() instead of getFragmentManager().

If this Fragment is a child of another Fragment, the FragmentManager returned here will be the parent's getChildFragmentManager().

quoted from http://developer.android.com/reference/android/app/Fragment.html

TouchBoarder
  • 6,422
  • 2
  • 52
  • 60