如何更改fragmentTabhost同一选项卡的标签的on​​Click的身体 [英] How to change the body of tab onClick of same tab in fragmentTabhost

查看:200
本文介绍了如何更改fragmentTabhost同一选项卡的标签的on​​Click的身体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在做什么

  • 在我有一个 fragmentabhost 在中有 3-标签片段。
  • 在点击标签,我能够动态地改变片段
  • 在点击第一个标签,我展示 RatingAscending.class

我试图做的

  • 现在,的onclick相同的标签我想要显示的 RatingDescending.class

注意的:在 onResume()我能够检测点击事件 firsttab


现在我该怎么改变标签为 RatingDescending.class RatingAscending.class 当我点击为第二次的标签


Fragment1.java

 公共类片段1扩展SherlockFragment {

    私人FragmentTabHost mTab​​Host;

    私有静态诠释计数= 0;
    //强制构造函数
    公共片段1(){
    }

    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

    }

    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){

        查看rootView = inflater.inflate(R.layout.fragment1,集装箱,假);


        mTabHost =(FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
        mTabHost.setup(getActivity(),getChildFragmentManager(),R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec(fragmentb)。setIndicator(等级),
                RatingAscending.class,NULL);
        mTabHost.addTab(mTabHost.newTabSpec(fragmentc)。setIndicator(价格),
                PriceAscending.class,NULL);
        mTabHost.addTab(mTabHost.newTabSpec(fragmentd)。setIndicator(距离),
                DistanceAscending.class,NULL);


        返回rootView;
    }

    @覆盖
    公共无效onResume(){
        // TODO自动生成方法存根
        super.onResume();

        mTabHost.getTabWidget()。getChildAt(0).setOnClickListener(新OnClickListener(){

            公共无效的onClick(视图v){

                算上++;
                Log.d(你点击计算+时间);

            }
        });
    }
}
 

解决方案
  • 我终于在这里找到了自己的答案(<一href="http://stackoverflow.com/questions/18120510/dynamically-changing-the-fragments-inside-a-fragment-tab-host/19859871#19859871">I refered这个帖子),我希望这可以帮助别人的未来
  • 下面的一张code是重要的是要实现这一目标

      FragmentTransaction交易= getChildFragmentManager()的BeginTransaction()。
     


 进口android.os.Bundle;
进口android.support.v4.app.FragmentManager;
进口android.support.v4.app.FragmentTabHost;
进口android.support.v4.app.FragmentTransaction;
进口android.util.Log;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.view.ViewGroup;

进口com.actionbarsherlock.app.SherlockFragment;
进口com.dev.navigation.DistanceAscending;
进口com.dev.navigation.DistanceDescending;
进口com.dev.navigation.PriceAscending;
进口com.dev.navigation.RatingAscending;
进口com.dev.navigation.RatingDescending;

公共类片段1扩展SherlockFragment {

    私人FragmentTabHost mTab​​Host;

    私有静态诠释计数= 0;
    //强制构造函数
    公共片段1(){
    }

    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        Log.d(日志,的onCreate);

    }

    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){

        查看rootView = inflater.inflate(R.layout.fragment1,集装箱,假);
        Log.d(日志,onCreateView);

        mTabHost =(FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
        mTabHost.setup(getActivity(),getChildFragmentManager(),R.id.realtabcontent);
        mTabHost.addTab(mTabHost.newTabSpec(fragmentb)setIndicator(等级),RatingAscending.class,空);
        mTabHost.addTab(mTabHost.newTabSpec(fragmentc)setIndicator(价格),PriceAscending.class,空);
        mTabHost.addTab(mTabHost.newTabSpec(fragmentd)setIndicator(距离),DistanceAscending.class,空);
        返回rootView;
    }


    @覆盖
    公共无效的OnStart(){
        // TODO自动生成方法存根
        super.onStart();
        Log.d(日志,ONSTART);

        mTabHost.getTabWidget()。getChildAt(0).setOnClickListener(新OnClickListener(){

            公共无效的onClick(视图v){

                算上++;
                Log.d(你点击计算+时间);


                RatingDescending fObj =新RatingDescending();
                // FragmentTransaction经理= getChildFragmentManager()的BeginTransaction()。
                FragmentTransaction英尺= getChildFragmentManager()的BeginTransaction()。
                //android.support.v4.app.FragmentTransaction英尺= manager.beginTransaction();
                ft.replace(R.id.realtabcontent,fObj);
                ft.commit();

                / *
                 * -------重叠型----片段------ code
                 * RatingDescending fObj =新RatingDescending();
                android.support.v4.app.FragmentManager经理= getActivity()getSupportFragmentManager()。
                android.support.v4.app.FragmentTransaction英尺= manager.beginTransaction();
                ft.replace(R.id.realtabcontent,fObj);
                ft.commit();
                * /
            }
        });
    }

    @覆盖
    公共无效onResume(){
        // TODO自动生成方法存根
        super.onResume();
        Log.d(日志,onResume);

    }
}
 

What I am doing:

  • I have a fragmentabhost in a fragment that has 3-tabs in it.
  • On click of tabs i am able to change the fragments dynamically
  • On click of first tab i am displaying RatingAscending.class

What I am trying to do:

  • Now Onclick of the same tab I want to display RatingDescending.class

Note: in the onResume() I am able to detect click event for the firsttab


Now how can I change the tab to RatingDescending.class from RatingAscending.class when I click the tab for the second time


Fragment1.java

public class Fragment1 extends SherlockFragment{

    private FragmentTabHost mTabHost;

    private static int count=0;
    //Mandatory Constructor
    public Fragment1() {
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

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

        View rootView = inflater.inflate(R.layout.fragment1,container, false);


        mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("Rating"),
                RatingAscending.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("Price"),
                PriceAscending.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("fragmentd").setIndicator("Distance"),
                DistanceAscending.class, null);


        return rootView;
    }

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        mTabHost.getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                count++;
                Log.d("You clicked ", count+"time");

            }
        });
    }   
}

解决方案

  • I Finally found answer myself here (I refered this post), i hope this helps someone in future
  • The below piece of code is important to achieve this goal

    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
    


import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTabHost;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;

import com.actionbarsherlock.app.SherlockFragment;
import com.dev.navigation.DistanceAscending;
import com.dev.navigation.DistanceDescending;
import com.dev.navigation.PriceAscending;
import com.dev.navigation.RatingAscending;
import com.dev.navigation.RatingDescending;

public class Fragment1 extends SherlockFragment{

    private FragmentTabHost mTabHost;

    private static int count=0;
    //Mandatory Constructor
    public Fragment1() {
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("Log", "onCreate");

    }

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

        View rootView = inflater.inflate(R.layout.fragment1,container, false);
        Log.d("Log", "onCreateView");

        mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);
        mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("Rating"),RatingAscending.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("Price"),PriceAscending.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("fragmentd").setIndicator("Distance"),DistanceAscending.class, null);
        return rootView;
    }


    @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.d("Log", "onStart");

        mTabHost.getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                count++;
                Log.d("You clicked ", count+"time");


                RatingDescending fObj=new RatingDescending();
                //FragmentTransaction manager = getChildFragmentManager().beginTransaction();
                FragmentTransaction ft = getChildFragmentManager().beginTransaction();
                //android.support.v4.app.FragmentTransaction ft = manager.beginTransaction();
                ft.replace(R.id.realtabcontent, fObj);
                ft.commit();

                /*
                 *-------OVERLAPPING----FRAGMENT------CODE 
                 * RatingDescending fObj=new RatingDescending();
                android.support.v4.app.FragmentManager manager = getActivity().getSupportFragmentManager();
                android.support.v4.app.FragmentTransaction ft = manager.beginTransaction();
                ft.replace(R.id.realtabcontent, fObj);
                ft.commit();
                */
            }
        });
    }   

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Log.d("Log", "onResume");

    }
}

这篇关于如何更改fragmentTabhost同一选项卡的标签的on​​Click的身体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆