У меня есть ящик для навигации, где есть несколько вариантов, таких как выставка, художник и галерея. Когда я нажимаю элемент в представлении контента на моей выставке, он работает. Затем, если я попытаюсь перейти к другому элементу элемента навигации, например Artist или Gallery, после предварительного просмотра элемента в отдельной работе с фрагментом, произойдет сбой всего приложения. Может ли кто-нибудь помочь?Фрагмент сбоев при смене навигации
Код ..
private class LoadViewTask extends AsyncTask<Void, Integer, Void> {
Activity mContex;
GridView listView;
public LoadViewTask(Activity mContext, GridView grid_view) {
.......
}
@Override
protected void onPreExecute() {
....
}
@Override
protected Void doInBackground(Void... params) {
...........
}
@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();
if(getActivity()!=null){
loadListing();
}
}
private void loadListing() {
ChannelAppProductsArrayAdapter adapter = new ChannelAppProductsArrayAdapter(
mContex, R.layout.itemlisting, productList, imageLoader);
listView.setAdapter(adapter);
//EDITED VERSION TO INITIATE SLIDER DRAWER
mDrawer = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout);
//prevent user from manually opening the drawer
mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
//Allow ScrollView at the preview-layout
ScrollView SV= (ScrollView) getActivity().findViewById(R.id.scrollView_Preview_Layout);
SV.scrollTo(0, 0);
SV.fullScroll(ScrollView.FOCUS_UP);
//END OF EDITED VERSION TO INITIATE SLIDER DRAWER
//listView.setOnClickListener()
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
/*String text = "Item click... should be implemented @ position: "
+ position;
Toast.makeText(mContex, text, Toast.LENGTH_LONG).show();*/
Product product = productList.get(position);
String productID = product.getId();
String productDesc = product.getName();
TextView ProductSummary;
String productName=product.getDescription();
TextView ProductName;
ImageView productImage;
imageLargename=productList.get(position).getLarge_image();
//EDITED VERSION TO SHOW RIGHT DRAWER-18/11/2014
mDrawerToggle = new CustomActionBarDrawerToggle(getActivity(), mDrawer);
mDrawer.openDrawer(GravityCompat.END);
mDrawer.setDrawerListener(mDrawerToggle);
getActivity().getActionBar().setHomeButtonEnabled(true); // Prevents user from opening the drawer using the app icon
Log.i("View onItemClick: ArtistProductDetailsFragment", "toggleRightDrawer()"+ productDesc);
//END OF EDITED VERSION TO SHOW RIGHT DRAWER-18/11/2014
//EDITED VERSION TO DISPLAY VIEW FOR SELECTED FRAGMENT ITEM-19/11/2014
View RDrawerView = mDrawer.findViewById(R.id.preview_layout);
//To set TextView of Product Name
ProductSummary = (TextView) RDrawerView.findViewById(R.id.productsummary);
ProductSummary.setText(productDesc);
//To set TextView of product description
ProductName= (TextView) RDrawerView.findViewById(R.id.productdesc);
ProductName.setText(productName);
//To get product Image from array
productImage =(ImageView) RDrawerView.findViewById(R.id.productimage);
String imgFilePath = url + imageLargename;
imageLoader.displayImage(imgFilePath, productImage, options);
productImage.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(mContex,
"Pinch & Zoom To See Large Photo.",
Toast.LENGTH_SHORT).show();
String imgFilePath = url + imageLargename;
Intent intent = new Intent(
mContex.getApplicationContext(),
FullScreenViewActivity.class);
intent.putExtra("path", imgFilePath);
startActivity(intent);
}
});
//END OF EDITED VERSION TO DISPLAY VIEW FOR SELECTED FRAGMENT ITEM-19/11/2014
}
});
}
//EDITED VERSION FOR CUSTOMACTIONBARDRAWERTOGGLE
private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle {
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.ic_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
@Override
public void onDrawerClosed(View view) {
getActivity().getActionBar().setTitle(getActivity().getString(R.string.ns_menu_close));
getActivity().invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
getActivity().getActionBar().setTitle(getActivity().getString(R.string.ns_menu_open));
getActivity().invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
}
//END OF EDITED VERSION FOR CUSTOMACTIONBARDRAWERTOGGLE
}
Error Log ..
11-26 10:47:50.719: E/AndroidRuntime(19168): FATAL EXCEPTION: main
11-26 10:47:50.719: E/AndroidRuntime(19168): java.lang.NullPointerException
11-26 10:47:50.719: E/AndroidRuntime(19168): at com.dapoaugury.channelappdemo.fragment.ChannelAppProductFragment$LoadViewTask$CustomActionBarDrawerToggle.onDrawerClosed(ChannelAppProductFragment.java:332)
11-26 10:47:50.719: E/AndroidRuntime(19168): at android.support.v4.widget.DrawerLayout.dispatchOnDrawerClosed(DrawerLayout.java:477)
11-26 10:47:50.719: E/AndroidRuntime(19168): at android.support.v4.widget.DrawerLayout.updateDrawerState(DrawerLayout.java:457)
11-26 10:47:50.719: E/AndroidRuntime(19168): at android.support.v4.widget.DrawerLayout$ViewDragCallback.onViewDragStateChanged(DrawerLayout.java:1355)
11-26 10:47:50.719: E/AndroidRuntime(19168): at android.support.v4.widget.ViewDragHelper.setDragState(ViewDragHelper.java:866)
11-26 10:47:50.719: E/AndroidRuntime(19168): at android.support.v4.widget.ViewDragHelper$2.run(ViewDragHelper.java:335)
11-26 10:47:50.719: E/AndroidRuntime(19168): at android.os.Handler.handleCallback(Handler.java:725)
11-26 10:47:50.719: E/AndroidRuntime(19168): at android.os.Handler.dispatchMessage(Handler.java:92)
11-26 10:47:50.719: E/AndroidRuntime(19168): at android.os.Looper.loop(Looper.java:137)
11-26 10:47:50.719: E/AndroidRuntime(19168): at android.app.ActivityThread.main(ActivityThread.java:5039)
11-26 10:47:50.719: E/AndroidRuntime(19168): at java.lang.reflect.Method.invokeNative(Native Method)
11-26 10:47:50.719: E/AndroidRuntime(19168): at java.lang.reflect.Method.invoke(Method.java:511)
11-26 10:47:50.719: E/AndroidRuntime(19168): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-26 10:47:50.719: E/AndroidRuntime(19168): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-26 10:47:50.719: E/AndroidRuntime(19168): at dalvik.system.NativeStart.main(Native Method)
EDIT 1:
я решил свой собственный вопрос. Благодарю.
То есть полностью удалить весь метод для private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle
. Я понял, что он не применим для второго ящика, поскольку он не вызывает панель действия для любой функции выдвижного ящика.
Кто назвал 'loadListing)' метод (? – Geros
@Glenn in onPostExecute Method, я обновил код – androidnoob
Доступ к двум объектам, которые доступны в onDrawerClosed, может генерировать NPE: активность или панель действий. Сначала укажите, что равно null, а затем попытайтесь выяснить, почему. Если это активность, то, возможно, активность завершилась до завершения AsyncTask. Или, если его панель действий, убедитесь, что она настроена правильно (хотя кажется, что вы должны, так как вы ссылаетесь на нее до этого момента. – Bruce