ユーザーを別のアクティビティに誘導しないタブ付きのパネルを含むアプリケーションを見てきました。おそらく、ここで TabHost + Fragment 要素が使用されます。
この機能の実装に関する前提/警告/リンクを教えてください。
ユーザーを別のアクティビティに誘導しないタブ付きのパネルを含むアプリケーションを見てきました。おそらく、ここで TabHost + Fragment 要素が使用されます。
この機能の実装に関する前提/警告/リンクを教えてください。
使用する利点TabHost
は、どこにでも配置できることです。それ自体として実装できますView
。
ここに私が見つけた2つの2つの良いリンクがあります:
ViewPager を利用できます。
最初にレイアウトに ViewPager を含めます (古いバージョンの互換パッケージにあるものを使用できます)。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</RelativeLayout>
複数のフラグメントを ViewPager にロードするには、FragmentPagerAdapter を実装する必要があります。
public class MyPagerAdapter extends FragmentPagerAdapter {
private Fragment fragment1;
private Fragment fragment2;
public ChartPagerAdapter(FragmentManager fm, Context context) {
super(fm);
fragment1 = new MyFragment();
fragment2 = new MyFragment();
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return fragment1;
case 1:
return fragment2;
}
}
@Override
public int getCount() {
return 2;
}
@Override
public String getPageTitle(int position) {
switch (position) {
case 0:
return "Title 1";
case 1:
return "Title 2";
}
}
}
次に、このアダプターを ViewPager に設定します。
setContentView(R.layout.my_layout);
MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), MyActivity.this);
ViewPager pager = (ViewPager)findViewById(R.id.pager);
pager.setAdapter(adapter);
TabActivity
次のように拡張できます。
public class NavigationBarActivity extends TabActivity (
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTabs();
}
private void setTabs(){
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Reusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
LayoutInflater inflater = getLayoutInflater();
// tab 1------------------------------
View tabView = inflater.inflate(R.layout.tab1, null, false);
ImageView tabImage = (ImageView)tabView.findViewById(R.id.tabImage);
TextView tabText = (TextView)tabView.findViewById(R.id.tabText);
// set icon
tabImage.setImageResource(R.drawable.tab1);
// set tab text
tabText.setText(R.string.tab1);
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, Activity1.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("ta1");
spec.setIndicator(tabView);
spec.setContent(intent);
tabHost.addTab(spec);
// tab 2 -----------------------------------------
tabView = inflater.inflate(R.layout.tab2, null, false);
tabImage = (ImageView)tabView.findViewById(R.id.tabImage);
tabText = (TextView)tabView.findViewById(R.id.tabText);
// set icon
tabImage.setImageResource(R.drawable.tab2);
// set tab text
tabText.setText(R.string.tab2);
intent = new Intent().setClass(this, ChatListActivity.class);
spec = tabHost.newTabSpec("tab2");
spec.setIndicator(tabView);
spec.setContent(intent);
tabHost.addTab(spec);
tabHost.setOnTabChangedListener(this);
}
@Override
public void onTabChanged(String tabId) {
if(getTabHost().getCurrentTab() == 0) {
// WE are on tab1 ...
}
}
}