我在我的应用程序有一个Sliding Drawer
并有碎片状HomeFragment
,FriendFragment
etc.Now的HomeFragment
有map
。所以当我在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中的同一项目。任何人都可以显示我的任何路径??在此先感谢。
空的catch块强烈反对。如果您发布了实际的错误消息,这将有很大的帮助。 – Simas 2015-02-23 15:27:07
其实它不是空的。我有一个吐司消息打印there.ok.i我给.. – 2015-02-23 15:28:25
我编辑了我的文章 – 2015-02-23 15:36:46