2

我的项目允许用户可以使用滑动菜单功能(在左侧)。在滑动菜单上,用户可以选择 4 个项目:零、一、二和三。我的项目有操作栏。

当用户单击零项目时,将显示一个屏幕。当用户单击一、二、三时,会显示类似的屏幕。一、二、三屏设计为 TabView。您可以查看项目以更轻松地理解它:

零项目运行正常。但是,我在编码一、二、三时遇到了问题。当我选择它们时,会发生错误。我不太了解 Fragment 和 Tabhost。

这是我选择任何项目的代码(在 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;
    }
}

案例0(表示选择零项目,显示零项目屏幕) 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;
    }

}

现在,我希望你帮我编写案例 1、案例 2、案例 3 的代码。类似的。它必须调用 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 {

}

三项.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;
    }
}

你能在这里下载我的项目吗?

4

1 回答 1

0

使用 getChildFragmentManager() 而不是 getFragmentManager()。

如果这个 Fragment 是另一个 Fragment 的子,这里返回的 FragmentManager 将是父的 getChildFragmentManager()。

引用自http://developer.android.com/reference/android/app/Fragment.html

于 2014-02-23T09:08:30.067 回答