2015-02-23 62 views
0

我在我的應用程序有一個Sliding Drawer並有碎片狀HomeFragmentFriendFragment etc.Now的HomeFragmentmap。所以當我在HomeFragment即它加壓,然後,如果我再次點擊同一按鈕,它crashes.I了下面我onCreateView()代碼如何避免在SlidingDrawer中按兩次相同的listview項目?

View v = inflater.inflate(R.layout.home_map_activity, null, false); 

在logcat中的錯誤是:

Caused by: java.lang.IllegalArgumentException: Binary XML file line #46: Duplicate id 0x7f0a008a, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment 
      at android.app.Activity.onCreateView(Activity.java:4722) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
            at com.example.MAPit.MAPit.HomeFragment.onCreateView(HomeFragment.java:79) 
            at android.app.Fragment.performCreateView(Fragment.java:1695) 
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) 
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) 
            at android.app.BackStackRecord.run(BackStackRecord.java:682) 
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) 
            at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441) 
            at android.os.Handler.handleCallback(Handler.java:725) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 



所以我在檢查的HomeFragment

if (v != null) { 
      ViewGroup parent = (ViewGroup) v.getParent(); 
      if (parent != null){ 
       parent.removeView(v); 
       } 
     } 
     try { 
      v = inflater.inflate(R.layout.home_map_activity, null, false); 
     } catch (InflateException e) { 
      //I have a toast check here and it's printing with vacant map and not crashing 
     } 

但是給這個檢查出事的應用程序沒有崩潰,但地圖上未調試的HomeFragment出現。我一看,原來是不充氣的佈局,即它是扔。然後我試圖在我的HomeFragment中添加這部分,但又崩潰了。

public void onDestroyView() { 
     super.onDestroyView(); 
     Fragment fragment = (getFragmentManager().findFragmentById(R.id.map)); 
     FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); 
     ft.remove(fragment); 
     ft.commit(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     if (map != null) { 
      map = null; 
     } 
    } 

我試圖禁用我的那個列表視圖選項,但它並沒有worked.what我想是

if(listview.getChildAt(selectedPosition).isEnabled()) 
{ 
    listview.getChildAt(selectedPosition).setEnabled(false); 
} 

的錯誤的logcat:

Caused by: java.lang.NullPointerException 
      at com.example.MAPit.MAPit.SlidingDrawerActivity.displayView(SlidingDrawerActivity.java:201) 
      at com.example.MAPit.MAPit.SlidingDrawerActivity.onCreate(SlidingDrawerActivity.java:138) 
      at android.app.Activity.performCreate(Activity.java:5104) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
            at android.app.ActivityThread.access$600(ActivityThread.java:141) 

我的列表查看onclick的執行代碼:

private class SlideMenuClickListener implements 
      ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
           long id) { 
      // display view for selected nav drawer item 
      displayView(position); 
     } 
    } 

    /** 
    * Displaying fragment view for selected nav drawer list item 
    */ 
    private void displayView(int position) { 

     switch (position) { 
      case 0: 
       fragment = new HomeFragment(); 
       getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       break; 
      case 1: 
       fragment = new Friend_Search_Fragment(); 
       getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       break; 
      case 2: 
       fragment = new Groups_Fragment(); 
       getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       break; 
      case 3: 
       fragment = new Friend_Request_Fragment(); 
       getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       Bundle frienddata = new Bundle(); 
       frienddata.putString(Commands.Notification_job.getCommand(), Commands.Friends_Request.getCommand()); 
       fragment.setArguments(frienddata); 
       break; 
      case 4: 
       fragment = new Friend_Request_Fragment(); 
       getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       Bundle groupdata = new Bundle(); 
       groupdata.putString(Commands.Notification_job.getCommand(), Commands.Group_Join_Group.getCommand()); 
       fragment.setArguments(groupdata); 
       break; 
      case 5: 
       fragment = new MyWallFragment(); 
       getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       break; 
      case 6: 
       Intent intent = new Intent(SlidingDrawerActivity.this,SignIn.class); 
       startActivity(intent); 
       break; 

      default: 
       break; 
     } 
     startFragment(fragment, position); 
    } 

    private void startFragment(Fragment fragment, int position) { 
     mDrawerLayout.closeDrawer(mDrawerLinear); 
     if (fragment != null) { 
      FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
      transaction.replace(R.id.frame_container,fragment); 
      transaction.addToBackStack(null); 
      transaction.commit(); 


      // update selected item and title, then close the drawer 
      if (position != -1) { 
       mDrawerList.setItemChecked(position, true); 
       mDrawerList.setSelection(position); 

      } 
      /*if(position == 0){ 
       if(mDrawerList.getChildAt(1)!=null) 
       mDrawerList.getChildAt(1).setEnabled(false); 
      }*/ 
      //setTitle(navMenuTitles[position]); 
      //mDrawerLayout.closeDrawer(mDrawerLinear); 
     } else { 
      // error in creating fragment 
      Log.e("MainActivity", "Error in creating fragment"); 
     } 
    } 

我不知道如何防止兩次點擊滑動drawer的listview中的同一項目。任何人都可以顯示我的任何路徑??在此先感謝。

+0

空的catch塊強烈反對。如果您發佈了實際的錯誤消息,這將有很大的幫助。 – Simas 2015-02-23 15:27:07

+0

其實它不是空的。我有一個吐司消息打印there.ok.i我給.. – 2015-02-23 15:28:25

+0

我編輯了我的文章 – 2015-02-23 15:36:46

回答

2
FragmentManager fm= getFragmentManager(); 
int count = fm.getBackStackEntryCount(); 
for (int i = 0; i < count; ++i) { 
    fm.popBackStackImmediate(); 
} 

你可以用這個 FragmentTransaction交易= getFragmentManager()之前將上面的代碼嘗試。的BeginTransaction()線

+0

感謝兄弟。其實我認爲getFragmentManager()。popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);這是我的工作.. – 2015-02-23 19:31:33

0

好吧,如果你不想按兩次,你可以在第一次按下後在你的按鈕上執行.setClickable(false)。 但從長遠來看,這不會解決您的問題,我想, 可以共享一些日誌嗎?你究竟在哪一行崩潰?

+0

,如果我使用getchildat()然後它崩潰在這裏,如果我使用第一個代碼,我提供瞭然後崩潰在膨脹layout.it時拋出異常。 – 2015-02-23 15:23:18

+0

我已經編輯我的帖子 – 2015-02-23 15:37:09

相關問題