2011-09-21 3 views
0

ActivityGroup을 사용하여 TabHost 아래에있는 Activity1 내에서 활동 2를 엽니 다. 따라서 탭 그룹이 있고 활동 1이 그 중 일부입니다. 그러나 활동 1의 버튼을 클릭하면 활동 2가 열리고 여전히 탭 아래에있게됩니다. 나는이 오류를 얻고있다ActivityGroup에서보기에 풍선을 적용 할 수 없음

@Override 
    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) { 
    super.newDropDownView(context, cursor, parent); 
    View view = View.inflate(context, R.layout.custom_spinner_row, null); 
    int labColumn = cursor.getColumnIndex("lab"); 
    String getLab = cursor.getString(labColumn); 
    TextView lab = (TextView)view.findViewById(R.id.CustomSpinnerTitle); 
    lab.setText(getLab);   
    return view; 
    } 

: 활동 2에서 나는 사용자 정의 창을 팽창하고 SimpleCursorAdapter 사용을위한 전화 몇 스피너를 가지고

public void replaceContentView(String id, Intent newIntent) { 
    View view = getLocalActivityManager().startActivity(id,newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
    this.setContentView(view); 
} 

그러나이 다음 코드를 사용하여 잘 작동

09-21 02:33:16.644: ERROR/AndroidRuntime(1453): FATAL EXCEPTION: main 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453): android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.view.ViewRoot.setView(ViewRoot.java:527) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.view.Window$LocalWindowManager.addView(Window.java:424) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.app.Dialog.show(Dialog.java:241) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.app.AlertDialog$Builder.show(AlertDialog.java:802) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.widget.Spinner.performClick(Spinner.java:260) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.view.View$PerformClick.run(View.java:9080) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.os.Handler.handleCallback(Handler.java:587) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.os.Looper.loop(Looper.java:123) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-21 02:33:16.644: ERROR/AndroidRuntime(1453):  at dalvik.system.NativeStart.main(Native Method) 

내가이 오류를 표시하는 이유는 활동 1의 contentView를 2로 대체했기 때문에 활동 2가 실제로 실행 중이 아니기 때문입니다. 전자 탭. 그러나 나는 그렇게 할 수있는 다른 방법을 모른다. 내 탭 아래에서 활동 2를 실행하는 방법은 실제로 contentView를 1로 바꾸는 대신 실제로 활동을 실행하는 것과 같은 방법으로 수행 할 수 있습니까?

답변

1

View을 다루는 ActivityGroup을 사용 중이므로 ActivityGroup을 사용할 때 직접 setContentView(R.layout.your_xml);을 사용할 수 없습니다. 이 경우 XML을 View로 확장해야합니다.

그래서,이 당신을 위해 일하는

View contentView = LayoutInflater.from(getParent()).inflate(R.layout.your_xml, null); 
setContentView(contentView); 

희망에 의해 setContentView(R.layout.your_xml)를 교체합니다.

+0

getParent()가 작동하지 않습니다. 컨텍스트는 나쁘지 않지만 실제로 활동이 시작되지는 않습니다. 보기로 설정 한 다음 첫 번째 활동 인 setContentView()에서 해당보기를 실행하여 활동을 열었습니다. 두 활동을 내 탭 아래에 유지하려면이 방법으로해야했습니다. – ryandlf

+0

오류가 발생하는 전체 활동 코드를 표시 할 수 있습니다. 그리고 오류는 여기에 나쁜 컨텍스트를 사용하고 있음을 보여줍니다. –

+0

오류 코드가 업데이트되었습니다. 활동 코드가 너무 길어 전체 내용을 게시 할 수 없습니다. 그러나 나는 시작이 의도와 시작을 ​​사용하는 규칙적인 방법이기 때문에 내가 그 활동을 시작하는 방법 때문에 오류가 발생한다는 것을 안다. 지금은 활동 1의보기를 바꾸어서 내 탭 아래에서 활동 2를 실행할 수 있습니다. – ryandlf

관련 문제