1

Я хочу сделать макет, похожий на рисунке ниже:Android макет ActionBarSherlock Tabs + ViewPagerIndicator на 1-й вкладке

enter image description here

То, что я пытался так как для

  1. Включенная библиотека Sherlock
  2. включен Viewpage Индикаторная библиотека
  3. Создан проект, используя «Fixed Tabs + swipe navigation type»
  4. испытано Android 2.1 Froyo до 4,4 KitKat без аварии

Теперь работа, чтобы сделать

Как вы можете видеть на картинке выше я хочу 3 действия бар вкладки + Overview Лапка должна содержат 4 других экрана с определенными видами. они должны измениться на событие swipe

И все остальные вкладки должны содержать в себе отдельный фрагмент.

ответ

0

Хорошо, я это сделал. Yeahhhssss: P

ОХК здесь то, что я сделал

Вот мой MainActivity extendind SherlockFragmentActivity

import java.util.ArrayList; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.FragmentTransaction; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockFragment; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 
import com.actionbarsherlock.view.Menu; 

public class MainActivity extends SherlockFragmentActivity { 


private ArrayList<Class> classes = new ArrayList<Class>(); 

@SuppressWarnings("unchecked") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    classes.add(OverView.class); 
    classes.add(LifeStyle.class); 
    classes.add(RealState.class); 

    // Set up the action bar. 
    final com.actionbarsherlock.app.ActionBar actionBar = getSupportActionBar(); 


    actionBar.setDisplayShowHomeEnabled(false); 
    actionBar.setDisplayShowTitleEnabled(false); 

    Tab tab = null; 

    for (int i = 0; i < classes.size(); i++) { 

     tab = actionBar 
       .newTab() 
       .setText(
         getResources().getStringArray(R.array.tabs_names)[i]) 
       .setTabListener(
         new TabListener<SherlockFragment>(this, "Tab" + i, 
           (Class<SherlockFragment>) classes.get(i))); 
     actionBar.addTab(tab); 
    } 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getSupportMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public static class TabListener<T extends SherlockFragment> implements 
     ActionBar.TabListener { 
    private SherlockFragment mFragment; 
    private final SherlockFragmentActivity mActivity; 
    private final String mTag; 
    private final Class<T> mClass; 

    /** 
    * Constructor used each time a new tab is created. 
    * 
    * @param activity 
    *   The host Activity, used to instantiate the fragment 
    * @param tag 
    *   The identifier tag for the fragment 
    * @param clz 
    *   The fragment's Class, used to instantiate the fragment 
    */ 
    public TabListener(SherlockFragmentActivity activity, String tag, 
      Class<T> clz) { 
     mActivity = activity; 
     mTag = tag; 
     mClass = clz; 
    } 

    /* The following are each of the ActionBar.TabListener callbacks */ 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // Check if the fragment is already initialized 
     if (mFragment == null) { 
      // If not, instantiate and add it to the activity 
      mFragment = (SherlockFragment) SherlockFragment.instantiate(
        mActivity, mClass.getName()); 
      ft.add(android.R.id.content, mFragment, mTag); 
     } else { 
      // If it exists, simply attach it in order to show it 
      ft.attach(mFragment); 
     } 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     if (mFragment != null) { 
      // Detach the fragment, because another one is being attached 
      ft.detach(mFragment); 
     } 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // User selected the already selected tab. Usually do nothing. 
    } 
} 

}

это установит мои 3 вкладки на ActionBar.

В настоящее время второй продукт содержит несколько фрагментов на первых вкладках и показывает индикатор страницы. Я достиг этого, используя индикатор представления пейджера и просмотр страницы.

вот мой overview.xml

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

    <android.support.v4.view.ViewPager 
     android:id="@+id/view_pager" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

    <com.viewpagerindicator.CirclePageIndicator 
     android:id="@+id/indicator" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#000000" 
     android:padding="10dip" /> 

</LinearLayout> 

и вот мой Overview.java файл, который раздувает выше файл XML, как этот

import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.actionbarsherlock.app.SherlockFragment; 
import com.viewpagerindicator.CirclePageIndicator; 

public class OverView extends SherlockFragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.overview_fragment, container, false); 

    MyPagerAdapter adapter = new MyPagerAdapter(); 
    ViewPager myPager = (ViewPager) rootView.findViewById(R.id.view_pager); 
    myPager.setAdapter(adapter); 
    myPager.setCurrentItem(0); 
    CirclePageIndicator indicator = (CirclePageIndicator) rootView 
      .findViewById(R.id.indicator); 
    indicator.setViewPager(myPager); 

    return rootView; 
} 

private class MyPagerAdapter extends PagerAdapter { 

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

    @Override 
    public Object instantiateItem(View collection, int position) { 

     LayoutInflater inflater = (LayoutInflater) collection.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = null; 

     switch (position) { 
     case 0: 

      view = inflater.inflate(R.layout.overview_1st, null); 

      break; 

     case 1: 

      view = inflater.inflate(R.layout.overview_2nd, null); 

      break; 

     case 2: 

      view = inflater.inflate(R.layout.overview_3rd, null); 

      break; 

     default: 

      view = inflater.inflate(R.layout.overview_3rd, null); 

      break; 
     } 

     ((ViewPager) collection).addView(view, 0); 

     return view; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 

    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return arg0 == ((View) arg1); 

    } 

} 

}

и здесь выход

enter image description hereenter image description hereenter image description here

также убедитесь, что вы включенные библиотеки

enter image description here