28

Bir Android Uygulaması üzerinde çalışıyorum ve her sekme için Fragmanlar kullanılarak gezinmek için 3 sekme kullanmak istiyorum, ancak bunu yapmak için yapıyı nasıl oluşturacağımı bilmiyorum.Fragmanlar ve Fragmanı olan TabHost

Her bir parçayı farklı olduğu için ayrı ayrı eklemek istiyorum, ancak bunları FragmentActivity'de nereye ekleyeceğimi bilmiyorum.

Bu dosyalara sahibim.

tabs_layout.xml

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 

public class MainTabsActivity extends FragmentActivity { 
public static final String RATE_A_PET = "Rate a Pet"; 
public static final String MY_RATES = "My Rates"; 
public static final String GLOBAL_RATES = "Global Rates"; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tabs_layout); 
} 
} 

Tabs.java

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TabHost; 
import android.widget.TabHost.OnTabChangeListener; 
import android.widget.TabHost.TabSpec; 
import android.widget.TextView; 

public class Tabs extends Fragment implements OnTabChangeListener { 
    private static final String TAG = "FragmentTabs"; 
    public static final String RATE_A_PET = "Rate a Pet"; 
    public static final String MY_RATES = "My Rates"; 
    public static final String GLOBAL_RATES = "Global Rates"; 

    private View mRoot; 
    private TabHost mTabHost; 
    private int mCurrentTab; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
//  super.onCreateView(inflater, container, savedInstanceState); 
     mRoot = inflater.inflate(R.layout.tabs_layout, null); 
     mTabHost = (TabHost) mRoot.findViewById(android.R.id.tabhost); 
     setupTabs(); 
     return mRoot; 
    } 

    private void setupTabs() { 
     mTabHost.setup(); // important! 
     mTabHost.addTab(newTab(RATE_A_PET, R.string.tabRateAPet, R.id.tabRateAPet)); 
     mTabHost.addTab(newTab(MY_RATES, R.string.tabViewMyRates, R.id.tabViewMyRates)); 
    } 

    private TabSpec newTab(String tag, int labelId, int tabContentId) { 
     Log.d(TAG, "buildTab(): tag=" + tag); 

     View indicator = LayoutInflater.from(getActivity()).inflate(
       R.layout.tab, 
       (ViewGroup) mRoot.findViewById(android.R.id.tabs), false); 
     ((TextView) indicator.findViewById(R.id.text)).setText(labelId); 

     TabSpec tabSpec = mTabHost.newTabSpec(tag); 
     tabSpec.setIndicator(indicator); 
     tabSpec.setContent(tabContentId); 
     return tabSpec; 
    } 


    @Override 
    public void onTabChanged(String tabId) { 
     Log.d(TAG, "onTabChanged(): tabId=" + tabId); 
     if (RATE_A_PET.equals(tabId)) { 
      updateTab(tabId, R.id.tabRateAPet); 
      mCurrentTab = 0; 
      return; 
     } 
     if (MY_RATES.equals(tabId)) { 
      updateTab(tabId, R.id.tabViewMyRates); 
      mCurrentTab = 1; 
      return; 
     } 
     if (GLOBAL_RATES.equals(tabId)) { 
      updateTab(tabId, R.id.tabViewGlobalRates); 
      mCurrentTab = 2; 
      return; 
     } 
    } 
    private void updateTab(String tabId, int placeholder) { 
     FragmentManager fm = getFragmentManager(); 
     if (fm.findFragmentByTag(tabId) == null) { 
      fm.beginTransaction() 
        .replace(placeholder, new RateMyPetActivity(), tabId) 
        .commit(); 
     } 
    } 

} 
+0

bu eğiticiye bakın ve herhangi bir zorluk bulursanız.bana sorabilirsiniz ... http: //manishkpr.webheavens.com/android-viewpager-example/ – TheFlash

+0

Ayrıca buna bakabilirsiniz.http: // wptrafficanalyzer./blog/ekleme-gezinme sekmeleri içeren liste görüntüleme eylemi çubuğu-in-android/ – Shadow

cevap

73

Her sekmede için ayrı bir parçası dosyası oluşturma öneriyoruz

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"> 

    <TabHost android:id="@android:id/tabhost" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" > 

      <TabWidget 
       android:id="@android:id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
      /> 

      <FrameLayout 
       android:id="@android:id/tabcontent" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 

      > 

       <FrameLayout 
        android:id="@+id/tabRateAPet" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 

       /> 

       <FrameLayout 
        android:id="@+id/tabViewMyRates" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 

       /> 

       <FrameLayout 
        android:id="@+id/tabViewGlobalRates" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 

       /> 


      </FrameLayout> 
     </LinearLayout> 
    </TabHost> 
</LinearLayout> 

TabsMain.java. Geçenlerde de bunu, bu yüzden benim kod aşağıda özetlenmiştir:

Düzen Files

activity_main.xml

<android.support.v4.app.FragmentTabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TabWidget 
     android:id="@android:id/tabs" 

     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0"/> 

    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_weight="0"/> 

    <FrameLayout 
     android:id="@+id/realtabcontent" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 

</LinearLayout> 
</android.support.v4.app.FragmentTabHost> 

tab1_view.xml // Bu biçimini kullanarak ilgili sekme düzenleri ekleyin (dize değişkenlerini değiştirmek için emin olun)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     tools:context=".DeviceFragment" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/tab1_fragment_string" /> 

</LinearLayout> 

SRC Dosyalar

MainActivity.java //, .addTab işleminde yalnızca metin kullandım. Ayrıca, hdpi klasörünüze eklemeniz gereken çizimleri kullanarak simgeleri de ekleyebilirsiniz. Ayrıca bu örnekte sadece üç sekme oluşturdum.

package com.example.applicationname; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTabHost; 

public class MainActivity extends FragmentActivity { 
    // Fragment TabHost as mTabHost 
    private FragmentTabHost mTabHost; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); 
     mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

     mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab1"), 
      Tab1Fragment.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"), 
      Tab2Fragment.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("Tab3"), 
      Tab3Fragment.class, null); 
    } 
} 

Tab1Fragment.java // kez daha

package com.example.applicationname; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Tab1Fragment extends Fragment { 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View V = inflater.inflate(R.layout.tab1_view, container, false); 

     return V; 
    } 
} 

sizin R.java ve strings.xml dosyaları uygun şekilde ayarlandığında ve ardından sekmeler olmalıdır emin olun sekme istenen sayıda çoğaltmak faal ve çalışır durumda.

+0

Tamam. Kontrol edeceğim. Teşekkürler. Bu benim için işe yararsa daha sonra söyleyeceğim :) – imarban

+1

hoş geldiniz! –

+0

Yardım ettiğine sevindim Sekmeleri iOS gibi altına taşıyabilir miyiz? – Dharmendra