텝안에 텝을 만들어서 셀렉트박스를 누를때 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번째 텝에서 텝을 또하나 생성합니다.

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번째 올리는 글인대 방법아시는분의 도움을 요청드립니다.