2014-10-15 3 views
3

Я в настоящее время вкладка фрагмент хоста, сделанные этой обучающей http://maxalley.wordpress.com/2013/05/18/android-creating-a-tab-layout-with-fragmenttabhost-and-fragments/Вкладка хоста Android-фрагмента + визитка?

Единственное отличие состоит в том, что я использую это внутри фрагмента. Поэтому у меня есть фрагмент с вкладками, каждая вкладка имеет еще один фрагмент ..

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

    <TabWidget 
     android:id="@android:id/tabs" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" /> 

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


</LinearLayout> 

Фрагмент класса

public class AddServiceFragment extends Fragment { 




    public AddServiceFragment() { 
     // Required empty public constructor 
    } 

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


    } 


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

     View view = inflater.inflate(R.layout.fragment_add_service, container, false); 
     FragmentTabHost mTabHost = (FragmentTabHost) view.findViewById(android.R.id.tabhost); 
     mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent); 


     String[] tabs = new String[]{"text1", "text2"}; 
     mTabHost.addTab(
       mTabHost.newTabSpec("tab1").setIndicator(tabs[0], null), 
       MedicalHistoryFragment.class, null); 


     mTabHost.addTab(
       mTabHost.newTabSpec("tab2").setIndicator(tabs[1], null), 
       MedicalHistoryFragment.class, null); 

      return view; 
    } 

Это работает, я могу видеть мои вкладки , Теперь я хочу реализовать viewpager, чтобы иметь возможность прокручивать влево или вправо.

Я прочитал это от разработчиков Android страницы http://developer.android.com/training/animation/screen-slide.html

Но я не могу понять, где я должен поставить свою ViewPager? Я хочу, чтобы мой фрагмент не зависят от моей деятельности ...

ответ

1

использовать следующее решение я клал на странице просмотра, как показано ниже .. и моя работа делается ..

<RelativeLayout 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" 
    tools:context=".MainActivity" > 

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

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="0" 
      android:orientation="horizontal" /> 

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

     <android.support.v4.view.ViewPager 
      android:id="@+id/viewpager" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:overScrollMode="never" /> 
    </LinearLayout> 
</TabHost> 

+0

Я думаю, он хотел бы, чтобы TabHost + ViewPager работал вместе, но не просто помещал ViewPager где-то внутри TabHost. – krossovochkin

+0

Он не уверен, что там, где viewpager внутри узла вкладки. Вот почему я показал этот код, как я реализовал в своем проекте, и он хорошо работал. –

+0

@ArpitPatel Как вы его реализовали? Можете ли вы показать пример? –

10

TabHost не поддерживает ViewPager.
Кроме того, я предлагаю вам не использовать TabHost - это старый стиль.
PagerTabStrip

Посмотрите это Gist.

UPD: Я добавляю код для случая, если этот Gist будет удален;

MainActivity.java

package ch.pboos.android.sample.viewpager; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class MainActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
     viewPager.setAdapter(new SampleFragmentPagerAdapter()); 
    } 

    public class SampleFragmentPagerAdapter extends FragmentPagerAdapter { 
     final int PAGE_COUNT = 5; 

     public SampleFragmentPagerAdapter() { 
      super(getSupportFragmentManager()); 
     } 

     @Override 
     public int getCount() { 
      return PAGE_COUNT; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return PageFragment.create(position + 1); 
     } 
    } 

    public static class PageFragment extends Fragment { 
     public static final String ARG_PAGE = "ARG_PAGE"; 

     private int mPage; 

     public static PageFragment create(int page) { 
      Bundle args = new Bundle(); 
      args.putInt(ARG_PAGE, page); 
      PageFragment fragment = new PageFragment(); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      mPage = getArguments().getInt(ARG_PAGE); 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_page, container, false); 
      TextView textView = (TextView) view; 
      textView.setText("Fragment #" + mPage); 
      return view; 
     } 
    } 
} 

activity_main.xml (без PagerTabStrip)

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</android.support.v4.view.ViewPager> 

activity_main_2.xml (с PagerTabStrip)

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <android.support.v4.view.PagerTabStrip 
     android:id="@+id/pager_header" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:background="#000" 
     android:paddingBottom="4dp" 
     android:paddingTop="4dp" 
     android:textColor="#fff" /> 

</android.support.v4.view.ViewPager> 

fragment_page.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" /> 

getPageTitle

public CharSequence getPageTitle(int position) { 
    return "Page " + (position + 1); 
} 

UPD 2 С Фрагментом:

public class MainFragment extends Fragment{ 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.activity_main_2, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
     viewPager.setAdapter(new SampleFragmentPagerAdapter()); 
    } 

    public class SampleFragmentPagerAdapter extends FragmentPagerAdapter { 
     final int PAGE_COUNT = 5; 

     public SampleFragmentPagerAdapter() { 
      super(getSupportFragmentManager()); 
     } 

     @Override 
     public int getCount() { 
      return PAGE_COUNT; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return PageFragment.create(position + 1); 
     } 
    } 

    public static class PageFragment extends Fragment { 
     public static final String ARG_PAGE = "ARG_PAGE"; 

     private int mPage; 

     public static PageFragment create(int page) { 
      Bundle args = new Bundle(); 
      args.putInt(ARG_PAGE, page); 
      PageFragment fragment = new PageFragment(); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      mPage = getArguments().getInt(ARG_PAGE); 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_page, container, false); 
      TextView textView = (TextView) view; 
      textView.setText("Fragment #" + mPage); 
      return view; 
     } 
    } 
} 

Надеется, что это помогает

+0

Я использую фрагмент, в котором хранятся вкладки ... нет активности ... –

+0

В этом случае нет большой разницы между Activity и Fragment. Вместо метода #onCreate() вы должны реализовать #onCreateView(), чтобы раздуть представление из ресурса макета и #onActivityCreated() (или onViewCreated()) для инициализации некоторых представлений. Я отредактировал мой вопрос с фрагментом кода о том, как он может быть реализован. Пожалуйста, проверь это. – krossovochkin

+3

Можете ли вы рассказать мне, откуда вы знаете, что TabHost в старом стиле? Я уже целый день просматриваю эту тему (вкладки с фрагментами), и это было невероятно болезненно. Документы разработчика сообщают вам о просмотре ViewPager для перемещения, об использовании вкладок ActionBar, AndroidStudio, который устарел, и предоставляет TabHost в дизайнере пользовательского интерфейса (помимо всех более или менее взломанных решений на SO и т. Д.). Почему все эти классы существуют без какой-либо документации? Как можно ожидать, что большинство приложений реализуют не устаревший и правильный интерфейс? Извините, последние вопросы, конечно, риторические. – tbolender

0

Вы можете реализовать ViewPager как библиотека.

Прежде всего вам нужно импортировать проект viewpager в рабочее пространство eclipse. [Я думаю, что вы изменяете проект: Tabhost пример]

так щелкните правой кнопкой Tabhost пример проекта THN сборки путь -> Configure построить путь .. THN нажмите Android ... при нажатии кнопки андроида вы можете увидеть 2 раздел Project build Target & Library.So в библиотеке вы можете добавить библиотеку viewpager.

+0

Нет, извините, ваш ответ неверен, и я использую Android Studio by путь. –

+0

вы можете включить его только через maven. Итак, если вам нужно добавить библиотечную папку в студию android и включить ее в файл app.gradle.file. library.gradle: - зависимости { компиляции 'com.android.support:support-v4:19.+' компиляция (реж дерева файлов: 'LIBS', включает в себя: [ '* .jar']) } – user3173628

0

Симметричного включить библиотеку ViewPager в проект, вы должны импортировать библиотеку
«Существующий проект» к вашему текущему

Шаг 1:.. -Скачать исходный код из GitHub (https://github.com/JakeWharton/Android-ViewPagerIndicator)

Шаг 2: -В вашем проекте Android Studio: Файл -> Структура проекта -> Добавить (+ символ) -> Импорт существующего проекта. Импортируйте только папку с именем «library», а не весь проект (оставьте параметры импорта, как Android Studio предлагает)

шаг 3: -Если «compileSdkVersion», указанный в вашем файле build.gradle, не совпадает с тем, который указан в проекте Android-ViewPagerIndicator, измените второй. То же самое относится к любому другому свойству, например «minSdkVersion» или даже к текущей библиотеке поддержки.

Шаг 4: Проект -Добавить Android-ViewPagerIndicator как зависимость от вашего build.gradle модуля: зависимостей { проекта компиляции (': библиотека') }

Шаг 5: - синхронизация проекта с Gradle файлов ,

Смежные вопросы