2012-12-30 2 views
2

menuoptions에서 팝업 대화 상자를 표시하려고합니다. 코드의 존재 - 팝업 대화 상자를 표시 할 수 없습니다.

public void createNewList(){ 
     popupCreateList = new PopupWindow(popupCreateListView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
     popupCreateList.setBackgroundDrawable(new BitmapDrawable()); 
     popupCreateList.setOutsideTouchable(true); 
     Log.i(TAG,"popUpListView-->>>" + popUpListView.getParent()); 
     //((ViewGroup)popUpListView.getParent()).removeView(popUpListView); <--Commented 

     popupCreateList.showAtLocation(findViewById(R.id.layoutTaskManagerID), Gravity.CENTER, 0, 0); <-- ERROR 
     //popupCreateList.showAsDropDown(listsButton, 50, -30); 

    } 

내가 그것을 실행하려고 할 때마다

가 로그 캣 오류 다음 내게 주신 IT -

12-30 14:43:00.735: E/AndroidRuntime(1385): FATAL EXCEPTION: main 
12-30 14:43:00.735: E/AndroidRuntime(1385): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.view.ViewGroup.addViewInner(ViewGroup.java:3378) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.view.ViewGroup.addView(ViewGroup.java:3249) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.view.ViewGroup.addView(ViewGroup.java:3225) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.widget.PopupWindow.preparePopup(PopupWindow.java:965) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.widget.PopupWindow.showAtLocation(PopupWindow.java:836) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.widget.PopupWindow.showAtLocation(PopupWindow.java:809) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at ray.kaushik.simple.task.manager.TaskManagerActivity.createNewList(TaskManagerActivity.java:340) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at ray.kaushik.simple.task.manager.TaskManagerActivity.onMenuItemSelected(TaskManagerActivity.java:324) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:958) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:468) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:126) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.view.View$PerformClick.run(View.java:16966) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.os.Handler.handleCallback(Handler.java:615) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.os.Looper.loop(Looper.java:137) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
12-30 14:43:00.735: E/AndroidRuntime(1385):  at dalvik.system.NativeStart.main(Native Method) 

내가 두 번 클릭 할 때이 오류가 직면하게된다. 내가보기를 제거하려면 주석 줄을 주석 경우 여전히 동일하게 유지됩니다. dumone plz이 이유에 대한 안내를 드리겠습니다. 제발 안드로이드 개발에 새로운 것으로 정교 해주십시오. 같은 아이디어. 사전에 감사드립니다.

레이

답변

0

를 사용하여이 작업 예제 코드를 (내가 쓴 그것을 테스트), 사용자의 요구에 적응 : 메뉴의 \의 my_options_menu.xml을 만들

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/popup1" 
android:title="popup1" /> 
</menu> 

레이아웃 \의 popup.xml 만들

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="@android:color/background_light"> 
    <LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_margin="1dp" 
    android:background="@android:color/darker_gray"> 
    > 
    <LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_margin="20dp"> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="It's a PopupWindow" /> 
    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 
    <Button 
     android:id="@+id/dismiss" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Dismiss" /> 
    </LinearLayout> 
</LinearLayout> 
</LinearLayout> 

주 활동에 다음을 추가하십시오.

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my_options_menu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.popup1: 
     if (popupCreateList!=null) return true; 
     LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
     View popupView = layoutInflater.inflate(R.layout.popup, null); 
     popupCreateList = new PopupWindow(popupView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
     popupCreateList.setBackgroundDrawable(new BitmapDrawable()); 
     popupCreateList.setOutsideTouchable(true); 
     popupCreateList.showAtLocation((RelativeLayout)findViewById(R.id.main_activity_layout), Gravity.CENTER, 0, 0); 
     Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss); 
     btnDismiss.setOnClickListener(new Button.OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       popupCreateList.dismiss(); 
       popupCreateList=null; 
      }}); 

     return true; 
    default: 
    return super.onOptionsItemSelected(item); 
    } 
} 

기타 : 저는 요에게 제안합니다. u는 당신을 고무하기 위해이 기사를 읽고 : 내가 사용하는 팝업 대화에 사용자로부터 어떤 입력을 필요

http://android-er.blogspot.it/2012/03/example-of-using-popupwindow.html

http://android-ed.blogspot.it/2011/08/using-popupwindow-in-android.html

PopupWindow in android

+1

thnx .. .. !! 나는 그것을 시험해 보라. .. !! – RayKaushik

0

당신이 경고를 사용하지 않고 이런 식으로하고있는 특별한 이유가 있습니까? 경고는 팝업 대화 상자입니다 (여러 개의 단추가있을 수 있음). 다른 방법 (Alert가 충분하지 않은 경우)은 Alert 테마 (매니페스트에 설정 됨)가있는 전체 활동을 작성한 다음 을 호출하면 완전히 기능하는 것처럼 경보처럼 보입니다. 액티비티 스택 맨 위에 살 수있는 액티비티).

내가 너를 이해하지 못한다면, 너가 메뉴에서 그것을 시작하려고한다는 사실은 요점 외에는 완전히있다. 어디서나 시작할 수 있습니다.

+0

. 새로운 활동을 사용하여 일부 입력을 받거나 대화 팝업으로 작동하는 데 대한 링크 또는 자세한 정보를 제공 할 수 있습니까? – RayKaushik

관련 문제