2014-11-26 2 views
0

У меня есть ящик для навигации, где есть несколько вариантов, таких как выставка, художник и галерея. Когда я нажимаю элемент в представлении контента на моей выставке, он работает. Затем, если я попытаюсь перейти к другому элементу элемента навигации, например 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. Я понял, что он не применим для второго ящика, поскольку он не вызывает панель действия для любой функции выдвижного ящика.

+0

Кто назвал 'loadListing)' метод (? – Geros

+0

@Glenn in onPostExecute Method, я обновил код – androidnoob

+0

Доступ к двум объектам, которые доступны в onDrawerClosed, может генерировать NPE: активность или панель действий. Сначала укажите, что равно null, а затем попытайтесь выяснить, почему. Если это активность, то, возможно, активность завершилась до завершения AsyncTask. Или, если его панель действий, убедитесь, что она настроена правильно (хотя кажется, что вы должны, так как вы ссылаетесь на нее до этого момента. – Bruce

ответ

0

То есть, чтобы полностью удалить весь метод для частного класса CustomActionBarDrawerToggle extends ActionBarDrawerToggle

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