大家好,我在用不同的值调用标签栏事件时遇到了问题。因为标签栏 View 在单个调用中加载。无法为类传递不同的值。例如,我必须加载 fri17、sat18、sun19 标签在选项卡栏类上。它的内容为第 17 天值、第 18 天值、第 19 天值。在将日期 17 传递到列表类后必须在 ListView 中加载。我尝试了更改监听器上的选项卡。仍然找不到解决这个问题的方法。有人能帮忙吗我。
package com.androidexample.tabbar;
import java.util.ArrayList;
import java.util.HashMap;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class TabBar extends TabActivity implements OnTabChangeListener{
public static String name;
static final String URL = "http://182.160.161.2/~mani/homeshow/web_serv/timeTableGetByRequest.php?event_id=14&sortBy=time";
static final String KEY_SONG = "date"; // parent node
static final String KEY_IDs = "timetable_date";
public HashMap<String, String> map;
public ArrayList<HashMap<String, String>> songsList;
String kid,ktit,kart,kdur,kurl,EID;
TabHost tabHost;
TabHost.TabSpec spec;
Intent intent;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.t2);
tabHost = getTabHost();
tabHost.setOnTabChangedListener(this);
songsList = new ArrayList<HashMap<String, String>>();
final NewProdCompleteXMLParser parser = new NewProdCompleteXMLParser();
String xml = parser.getXmlFromUrl(URL);
final Document doc = parser.getDomElement(xml);
NodeList nl = doc.getElementsByTagName(KEY_SONG);
for (int i = 0; i < nl.getLength(); i++) {
map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
map.put(KEY_IDs, parser.getValue(e, KEY_IDs));
songsList.add(map);
kid=parser.getValue(e, KEY_IDs);
System.out.println("kid"+kid);
intent = new Intent().setClass(this, Tab1.class);
spec= tabHost.newTabSpec("hhj").setIndicator(kid)
.setContent(intent);
tabHost.addTab(spec);
tabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.tab_bg);
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextColor(Color.WHITE);
}
tabHost.getTabWidget().setCurrentTab(0);
tabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab_hover);
}
public void onTabChanged(String tabId) {
name=songsList.get(tabHost.getCurrentTab()).get("timetable_date");
System.out.println("on tab changed"+name);
/************ Called when tab changed *************/
//********* Check current selected tab and change according images *******/
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
{
tabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.tab_bg);
}
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
{
tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundResource(R.drawable.tab_hover);
}
Log.i("tabs", "CurrentTab: "+tabHost.getCurrentTab());
while(tabHost.getCurrentTab()==1)
{
Intent intent1 = new Intent().setClass(this, Tab1.class);
spec.setContent(intent1);
//Add intent to tab
System.out.println("on tab changed"+name);
tabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab_bg);
}
}
}
必须发送 System.out.println("on tab changed"+name);
。这个名字 val(ie.fri17..sat 18.on each tab click to next Tab1 class)
public class Tab1 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab1);
TabBar tb=new TabBar();
String name = tb.name;
System.out.println("on tab changed TT"+name);
}
}
最佳答案
你有两个更好的 android 特定选项
1>使用 JakeWharton 的 Android-ViewPagerIndicator
2>非常有名的 astuetz PagerSlidingTabStrip
使用这个库和示例做一些 hack 以在您的每个父选项卡中加载这些 amples Activity 或 fragment 。
除此之外你还可以做two way communication between a TabActivity (即托管 TabHost 的 Activity )及其各自的子选项卡(每个选项卡内的 Activity )。
布局要点代码:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:tag="tab0"
android:text="Tab 1"
android:background="@android:drawable/btn_star_big_on"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
/>
<TextView
android:tag="tab1"
android:text="Tab 2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
/>
<TextView
android:tag="tab2"
android:text="Tab 3"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
/>
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:text="Hallo1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView
android:text="Hallo2"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView
android:text="Hallo3"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</FrameLayout>
</LinearLayout>
</TabHost>
Activity :
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TabHost;
import android.widget.TabHost.TabContentFactory;
import android.widget.TabHost.TabSpec;
import android.widget.TabWidget;
import android.widget.TextView;
public class SensorActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabsample);
TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
tabHost.setup();
final TabWidget tabWidget = tabHost.getTabWidget();
final FrameLayout tabContent = tabHost.getTabContentView();
// Get the original tab textviews and remove them from the viewgroup.
TextView[] originalTextViews = new TextView[tabWidget.getTabCount()];
for (int index = 0; index < tabWidget.getTabCount(); index++) {
originalTextViews[index] = (TextView) tabWidget.getChildTabViewAt(index);
}
tabWidget.removeAllViews();
// Ensure that all tab content childs are not visible at startup.
for (int index = 0; index < tabContent.getChildCount(); index++) {
tabContent.getChildAt(index).setVisibility(View.GONE);
}
// Create the tabspec based on the textview childs in the xml file.
// Or create simple tabspec instances in any other way...
for (int index = 0; index < originalTextViews.length; index++) {
final TextView tabWidgetTextView = originalTextViews[index];
final View tabContentView = tabContent.getChildAt(index);
TabSpec tabSpec = tabHost.newTabSpec((String) tabWidgetTextView.getTag());
tabSpec.setContent(new TabContentFactory() {
@Override
public View createTabContent(String tag) {
return tabContentView;
}
});
if (tabWidgetTextView.getBackground() == null) {
tabSpec.setIndicator(tabWidgetTextView.getText());
} else {
tabSpec.setIndicator(tabWidgetTextView.getText(), tabWidgetTextView.getBackground());
}
tabHost.addTab(tabSpec);
}
// tabHost.setCurrentTab(0);
}
}
来源:gist
关于android - 具有相同类的嵌套标签栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250613/