我正在向GridFragment添加一个ActionBar,如下所示:
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:
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?应该在哪里宣布呢?
谢谢!!
发布于 2014-10-05 10:51:15
以下是工作原理:
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);
}
}https://stackoverflow.com/questions/26126807
复制相似问题