首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:片段中的ActionBar

Android:片段中的ActionBar
EN

Stack Overflow用户
提问于 2014-10-01 01:38:27
回答 1查看 295关注 0票数 0

我正在向GridFragment添加一个ActionBar,如下所示:

代码语言:javascript
复制
public class ImageGridFragment extends AbsListViewBaseFragment implements ActionBar.OnNavigationListener 
{       
    //ActionBar
    private ActionBar actionBar;
    private ArrayList<SpinnerNavItem> navSpinner;   // Title navigation Spinner data
    private TitleNavigationAdapter adapter; // Navigation adapter
    private MenuItem refreshMenuItem; // Refresh menu item

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {
        View rootView = inflater.inflate(R.layout.fr_image_grid, container, false);
        listView = (GridView) rootView.findViewById(R.id.grid);
        ((GridView) listView).setAdapter(new ImageAdapter());
        listView.setOnItemClickListener(new OnItemClickListener() 
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
            {
                TextView xx = (TextView) view.findViewById(R.id.grid_photo_id);
                String xxx = xx.getText().toString();
                Constants.gridview_photo_id_clicked = Integer.parseInt(xxx);
                startImageListViewActivity(position);
            }
        });

        actionBar = getActivity().getActionBar();
        actionBar.setDisplayShowTitleEnabled(false);    // LINE 100, NPE
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);    // Enabling Spinner dropdown navigation

        // Spinner title navigation data
        navSpinner = new ArrayList<SpinnerNavItem>();
        navSpinner.add(new SpinnerNavItem("Local", R.drawable.ic_location));
        navSpinner.add(new SpinnerNavItem("My Places", R.drawable.ic_my_places));
        navSpinner.add(new SpinnerNavItem("Checkins", R.drawable.ic_checkin));
        navSpinner.add(new SpinnerNavItem("Latitude", R.drawable.ic_latitude));
        adapter = new TitleNavigationAdapter(getActivity(), navSpinner);    // title drop down adapter
        actionBar.setListNavigationCallbacks(adapter, this);    // assigning the spinner navigation
        // Changing the action bar icon
        // actionBar.setIcon(R.drawable.ico_actionbar);
        return rootView;
    }

Logcat:

代码语言:javascript
复制
10-01 01:27:01.716: E/AndroidRuntime(1588): Caused by: java.lang.NullPointerException
10-01 01:27:01.716: E/AndroidRuntime(1588):     at com.abc.abc3.fragment.ImageGridFragment.onCreateView(ImageGridFragment.java:100)
10-01 01:27:01.716: E/AndroidRuntime(1588):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
10-01 01:27:01.716: E/AndroidRuntime(1588):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
10-01 01:27:01.716: E/AndroidRuntime(1588):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
10-01 01:27:01.716: E/AndroidRuntime(1588):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
10-01 01:27:01.716: E/AndroidRuntime(1588):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
10-01 01:27:01.716: E/AndroidRuntime(1588):     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570)
10-01 01:27:01.716: E/AndroidRuntime(1588):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1188)
10-01 01:27:01.716: E/AndroidRuntime(1588):     at android.app.Activity.performStart(Activity.java:5382)
10-01 01:27:01.716: E/AndroidRuntime(1588):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2279)
10-01 01:27:01.716: E/AndroidRuntime(1588):     ... 11 more

问题:

如上所述,它在第100行出现NPE错误。我如何准确地在片段中添加ActionBar?应该在哪里宣布呢?

谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2014-10-05 10:51:15

以下是工作原理:

代码语言:javascript
复制
public class ImageGridFragment implements ActionBar.OnNavigationListener
{

// ActionBar
private ActionBar actionBar;
private ArrayList<SpinnerNavItem> navSpinner;   // Title navigation Spinner data
private TitleNavigationAdapter adapter;         // Navigation adapter

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
    View rootView = inflater.inflate(R.layout.fr_image_grid, container, false);
    listView = (GridView) rootView.findViewById(R.id.grid);
    ((GridView) listView).setAdapter(new ImageAdapter());
    listView.setOnItemClickListener(new OnItemClickListener() 
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
        {
            // actions 
        }
    });

    // ActionBar
    actionBar = getActivity().getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setDisplayShowTitleEnabled(true);                             
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);            
    navSpinner = new ArrayList<SpinnerNavItem>();                           
    navSpinner.add(new SpinnerNavItem("All", R.drawable.icon_go));
    navSpinner.add(new SpinnerNavItem("Cat 1", R.drawable.icon_go));
    navSpinner.add(new SpinnerNavItem("Cat 2", R.drawable.icon_go));
    adapter = new TitleNavigationAdapter(getActivity().getApplicationContext(), navSpinner);
    actionBar.setListNavigationCallbacks(adapter, this);    
    return rootView;
}

@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) 
{
    // Action to be taken after selecting a spinner item
    return false;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{
    // Inflate the menu items for use in the action bar
    inflater.inflate(R.menu.action_grid_menu, menu);
    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
}

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    switch (item.getItemId()) 
    {
        case android.R.id.home:
            getActivity().finish();
            return true;                
        case R.id.action_search:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26126807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档