텝안에 텝을 만들어서 셀렉트박스를 누를때 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번째 올리는 글인대 방법아시는분의 도움을 요청드립니다.



