2015-02-23 96 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

相关问题