如何更改fragmentTabhost同一选项卡的标签的onClick的身体 [英] How to change the body of tab onClick of same tab in fragmentTabhost
本文介绍了如何更改fragmentTabhost同一选项卡的标签的onClick的身体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在做什么
- 在我有一个
fragmentabhost
在中有3-标签
片段。 - 在点击标签,我能够动态地改变片段
-
在点击
第一个标签,我展示RatingAscending.class
的
我试图做的
- 现在,
的onclick相同的标签我想要显示的
RatingDescending.class
注意的:在 onResume()
我能够检测点击事件
为 firsttab
现在我该怎么改变标签为 RatingDescending.class
从 RatingAscending.class
当我点击为第二次的标签
Fragment1.java
公共类片段1扩展SherlockFragment {
私人FragmentTabHost mTabHost;
私有静态诠释计数= 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 mTabHost;
私有静态诠释计数= 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 has3-tabs
in it. - On click of tabs i am able to change the fragments dynamically
On click
of first tab i am displayingRatingAscending.class
What I am trying to do:
- Now
Onclick
of the same tab I want to displayRatingDescending.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同一选项卡的标签的onClick的身体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文