텝안에 텝을 만들어서 셀렉트박스를 누를때 alertDialog 뜰때 생기는 문제입니다.
public class MainActivity extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TabHost tabHost = getTabHost(); tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("전체").setContent(new Intent(this, Tab1.class))); tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("수입").setContent(new Intent(this, Tab2.class))); tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("지출").setContent(new Intent(this, Tab3.class))); tabHost.addTab(tabHost.newTabSpec("tab4").setIndicator("통계").setContent(new Intent(this, Tab4.class))); } }
메인에서 텝 생성 후
4번째 텝에서 텝을 또하나 생성합니다.
public class Tab4 extends ActivityGroup { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab4); TabHost tabHost = (TabHost)findViewById(R.id.tabHost); tabHost.setup(getLocalActivityManager()); tabHost.addTab(tabHost.newTabSpec("tab4_1").setIndicator("년").setContent(new Intent(this, Tab4_1.class))); tabHost.addTab(tabHost.newTabSpec("tab4_2").setIndicator("월").setContent(new Intent(this, Tab4_2.class))); tabHost.addTab(tabHost.newTabSpec("tab4_3").setIndicator("지출 수단").setContent(new Intent(this, Tab4_3.class))); } }
화면에 Spinner는 잘 보이나 클릭시 뻗어버립니다.
public class Tab4_1 extends Activity implements OnItemClickListener, OnItemSelectedListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab4_1); String year_list[] = new String[]{"2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020"}; ArrayAdapter<String> arrayAdt = new ArrayAdapter<String>(Tab4_1.this, android.R.layout.simple_spinner_dropdown_item, year_list); Spinner sFromYear = (Spinner)findViewById(R.id.sFromYear); sFromYear.setPrompt("년도를 선택하세요."); sFromYear.setOnItemSelectedListener(Tab4_1.this); sFromYear.setAdapter(arrayAdt); Spinner sToYear = (Spinner)findViewById(R.id.sToYear); sToYear.setPrompt("년도를 선택하세요."); sToYear.setOnItemSelectedListener(Tab4_1.this); sToYear.setAdapter(arrayAdt); Calendar cal = Calendar.getInstance(); Date currentTime = cal.getTime(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy"); sFromYear.setSelection(Integer.parseInt(formatter.format(currentTime).substring(3)) - 1); sToYear.setSelection(Integer.parseInt(formatter.format(currentTime).substring(3)) - 1); } public void mOnClick(View view){ switch (view.getId()){ case R.id.searchButton : setList(); break; } } public void setList(){ DBAdapter dbAdapter = null; Cursor cursor = null; try { dbAdapter = new DBAdapter(Tab4_1.this, false); Spinner sFromDate = (Spinner)findViewById(R.id.sFromYear); Spinner sToDate = (Spinner)findViewById(R.id.sToYear); String columns[] = new String[]{"substr(inout_date, 0, 5) year", "sum(account) sumAccount"}; String where = "substr(inout_date, 0, 5) <= '" + sFromDate.getSelectedItem().toString() + "' and substr(inout_date, 0, 5) >= '" + sToDate.getSelectedItem().toString()+ "'"; String groupBy = "group by substr(inout_date, 0, 5), inout_type"; String orderBy = "substr(inout_date, 0, 5)"; cursor = dbAdapter.selectInout(columns, where, groupBy, orderBy); int totalPrice = 0; TextAdapter textAdapter = new TextAdapter(Tab4_1.this); for(int i = 0, n = cursor.getCount() ; i < n ; i++){ cursor.moveToNext(); } TextView t_totalPrice = (TextView)findViewById(R.id.outTotalPrice); t_totalPrice.setText(UTIL.accountFormat(totalPrice)); GridView list = (GridView)findViewById(R.id.tab3List); list.setAdapter(textAdapter); TextView temp = (TextView)findViewById(R.id.temp); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(temp.getWindowToken(), 0); } catch (Exception e) { e.printStackTrace(); } finally { if(cursor != null)cursor.close(); if(dbAdapter != null)dbAdapter.close(); } } public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { } public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) { } public void onNothingSelected(AdapterView<?> arg0) { } }
에러 내용은
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): FATAL EXCEPTION: main
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@48365878 is not valid; is your activity running?
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.view.ViewRoot.setView(ViewRoot.java:505)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.view.Window$LocalWindowManager.addView(Window.java:424)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.app.Dialog.show(Dialog.java:241)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.app.AlertDialog$Builder.show(AlertDialog.java:823)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.widget.Spinner.performClick(Spinner.java:257)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.view.View$PerformClick.run(View.java:8915)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.os.Handler.handleCallback(Handler.java:587)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.os.Handler.dispatchMessage(Handler.java:92)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.os.Looper.loop(Looper.java:123)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at android.app.ActivityThread.main(ActivityThread.java:4632)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at java.lang.reflect.Method.invoke(Method.java:521)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-25 06:50:13.005: ERROR/AndroidRuntime(6549): at dalvik.system.NativeStart.main(Native Method)
05-25 06:50:13.052: WARN/ActivityManager(2418): Force finishing activity kr.co.hk/.MainActivity
이리저리 검색해볼때 alertDialog 생성시 this 대신 getParent(); 쓰라고 나와있는대
alertDialog를 제가 생성하는게 아닌지라 고생을 하고있습니다.
3번째 올리는 글인대 방법아시는분의 도움을 요청드립니다.