2014-10-21 3 views
1

Я слежу за http://developer.android.com/training/implementing-navigation/lateral.html, чтобы создать обзор с фрагментами.Как добавить панель действий в режим прокрутки?

В частности, я взял блок кода

public class CollectionDemoActivity extends FragmentActivity { 
    // When requested, this adapter returns a DemoObjectFragment, 
    // representing an object in the collection. 
    DemoCollectionPagerAdapter mDemoCollectionPagerAdapter; 
    ViewPager mViewPager; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_collection_demo); 

     // ViewPager and its adapters use support library 
     // fragments, so use getSupportFragmentManager. 
     mDemoCollectionPagerAdapter = 
       new DemoCollectionPagerAdapter(
         getSupportFragmentManager()); 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mDemoCollectionPagerAdapter); 
    } 
} 

// Since this is an object collection, use a FragmentStatePagerAdapter, 
// and NOT a FragmentPagerAdapter. 
public class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter { 
    public DemoCollectionPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
     Fragment fragment = new DemoObjectFragment(); 
     Bundle args = new Bundle(); 
     // Our object is just an integer :-P 
     args.putInt(DemoObjectFragment.ARG_OBJECT, i + 1); 
     fragment.setArguments(args); 
     return fragment; 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     return "OBJECT " + (position + 1); 
    } 
} 

// Instances of this class are fragments representing a single 
// object in our collection. 
public static class DemoObjectFragment extends Fragment { 
    public static final String ARG_OBJECT = "object"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
      ViewGroup container, Bundle savedInstanceState) { 
     // The last two arguments ensure LayoutParams are inflated 
     // properly. 
     View rootView = inflater.inflate(
       R.layout.fragment_collection_object, container, false); 
     Bundle args = getArguments(); 
     ((TextView) rootView.findViewById(android.R.id.text1)).setText(
       Integer.toString(args.getInt(ARG_OBJECT))); 
     return rootView; 
    } 
} 

и расширил его, чтобы удовлетворить свои потребности.

Как изменить это, чтобы в верхней части экрана была панель действий с указанием только имени операции (в центре) и значка приложения и стрелки для возврата родительской активности (к оставил)?

Я попытался добавить

final ActionBar actionBar = getActionBar(); 
actionBar.setHomeButtonEnabled(true); 

к CollectionDemoActivity OnCreate в приведенном выше коде, но это вызывает мое приложение к сбою.

Edit:

Мой styles.xml включает

<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> 
<style name="AppTheme" parent="AppBaseTheme"> 

Мой манифест включает

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

... теги активности внутри приложения. Ни один из этих действий не отменяет андроид: тема, установленная на уровне приложения. Родительская активность имеет панель действий, но ребенок (активность прокрутки, о которой я прошу в этом сообщении), нет.

+0

Ваша тема должна поддерживать наличие ActionBar. Если вы просто попытаетесь получить доступ к нему без поддержки темы, то вы получите исключение NullPointerException и сбой. –

+0

Я думаю, что это уже делает: родительская активность (та, которая запускает активность салфетки) имеет панель действий, например. Будет редактировать сообщение и добавлять дополнительную информацию. – Adrian

+0

Темы могут быть основаны на активности по видам деятельности, но если вы уверены, что в этом конкретном действии есть тема, тогда вы можете взглянуть на дополнительную информацию, которая у вас есть. –

ответ

2

Ваша проблема очень проста в своем характере, так как она имеет мало общего с видом салфетки: вам просто нужен ActionBar в вашем FragmentActivity.

The documentation makes a special note about using the ActionBar in a FragmentActivity:

Примечание: Если вы хотите осуществить деятельность, которая включает в себя панель действий, вы должны использовать класс ActionBarActivity, который является подклассом этого, поэтому позволяет использовать API-интерфейсы фрагментов API уровня 7 и выше.

Сделайте свою деятельность расширенной ActionBarActivity и получите ссылку на ActionBar, используя getSupportActionBar().

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