在模拟器上按返回键,可以成功返回上一个Activity,而在真机上运行同一个程序,当从Activity A进入到Activity B,再进入到Activity C中,当从Activity C按两次返回键回到Activity A时,它会自动跳回到Activity C一次。
    这是为什么呢?怎么解决呢?

解决方案 »

  1.   

    我不理解你所描述的: 当从Activity C按两次返回键回到Activity A时,它会自动跳回到Activity C一次。 是什么意思
    点两次是双击,还是缓慢的两次? 是doubleOnSnap的实现么? 是Activity C → B→ C→ A  还是CBAC还是CAC 
      

  2.   

    就是点一次返回键,从Activity C返回到Activity B,再点一次返回键,从Activity B返回到Activity A,然后它自动跳回了 Activity C,然后再点返回键,就从Activity C 直接跳回到Activity A。
      

  3.   

    是不是在ActivityC中做了什么特殊处理了,影响了Activity 栈
      

  4.   

    public class ClassSheet2 extends Activity {
        /** Called when the activity is first created. */
     private TabHost tabHost;
     private String week="1";
     private ListView listView;  
     HashMap<String, String> map;    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.csheet);
            tabHost = (TabHost) this.findViewById(android.R.id.tabhost);
              tabHost.setup();
              tabHost.addTab(tabHost.newTabSpec("tab_1")
                             .setContent(R.id.tab1)
                              .setIndicator("一",getResources().getDrawable(R.drawable.tab_sel)));
              tabHost.addTab(tabHost.newTabSpec("tab_2")
                               .setContent(R.id.tab2).setIndicator("二",getResources().getDrawable(R.drawable.tab_sel)));
              tabHost.addTab(tabHost.newTabSpec("tab_3")
                             .setContent(R.id.tab3).setIndicator("三",getResources().getDrawable(R.drawable.tab_sel)));
              tabHost.addTab(tabHost.newTabSpec("tab_4")
                      .setContent(R.id.tab4).setIndicator("四",getResources().getDrawable(R.drawable.tab_sel)));
              tabHost.addTab(tabHost.newTabSpec("tab_5")
                      .setContent(R.id.tab5).setIndicator("五",getResources().getDrawable(R.drawable.tab_sel)));
              tabHost.addTab(tabHost.newTabSpec("tab_6")
                      .setContent(R.id.tab6).setIndicator("六",getResources().getDrawable(R.drawable.tab_sel)));
              tabHost.addTab(tabHost.newTabSpec("tab_7")
                      .setContent(R.id.tab7).setIndicator("日",getResources().getDrawable(R.drawable.tab_sel)));        
              final TabWidget tw = tabHost.getTabWidget();
              for (int i = 0; i < tw.getChildCount(); i++) {
                     TextView textView = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
                    textView.setTextColor(ClassSheet2.this.getResources().getColor(android.R.color.white));
                    tw.getChildAt(i).getLayoutParams().height = 50;
                    tw.getChildAt(i).getLayoutParams().width = 45;
                    }          
              tabHost.setCurrentTab(0);
              new WSAsyncTask().execute();
              tabHost.setOnTabChangedListener(new OnTabChangeListener() {
    @Override
    public void onTabChanged(String tabId) {
    // TODO Auto-generated method stub
    System.out.println(tabId);
    if(tabId=="tab_1"){
    week="1";
    }else if(tabId=="tab_2"){
    week="2";
    }else if(tabId=="tab_3"){
    week="3";
    }else if(tabId=="tab_4"){
    week="4";
    }else if(tabId=="tab_5"){
    week="5";
    }else if(tabId=="tab_6"){
    week="6";
    }else if(tabId=="tab_7"){
    week="7";
    }
    new WSAsyncTask().execute();
    }

    });
              
             
       }
          
        class WSAsyncTask extends AsyncTask<Object, Object, Object>   
        { 
          ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();
          String result = "";   
          @Override  
          protected Object doInBackground(Object... params)   
          {       
           try  
           {
                 String serviceUrl = "http://"+FzxyLogin.ip+"/GuestWebService.asmx?WSDL";   
                 String methodName = "SearchClassSyllabus";   
                 SoapObject request = new SoapObject("http://tempuri.org/",methodName);   
                 request.addProperty("termId", getIntent().getStringExtra("termId"));  
                 request.addProperty("className", getIntent().getStringExtra("className")); 
                 request.addProperty("week", week);   
                 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);   
                 envelope.bodyOut = request;
                 envelope.dotNet=true;
                 (new MarshalBase64()).register(envelope);
                 HttpTransportSE ht = new HttpTransportSE(serviceUrl); 
                 ht.debug=true;
                  ht.call("http://tempuri.org/"+methodName, envelope);   
                 if (envelope.getResponse() != null)   
                  {   
                     SoapObject soapObject = (SoapObject) envelope.getResponse();
                   System.out.println(soapObject.getProperty(1));
                     int count=soapObject.getPropertyCount();
                     System.out.println(count);
                     result+=soapObject.toString();
                      for(int i=0;i<count;i++){
                       String str=soapObject.getProperty(i).toString();
                       String[] sss=str.split("=|;");
                           map = new HashMap<String, String>();
                          sss[1]=sss[1]+"-"+(Integer.parseInt(sss[1])+1);
                          map.put("Jieci", sss[1]);
                          map.put("CourseName", sss[3]);
                          map.put("Teacher", sss[5]);
                          map.put("ClassRoom", sss[7]);
                          map.put("Weekday", sss[9]);
                          list.add(map);
                          result+=(map.get("Jieci")+map.get("CourseName")+map.get("ClassRoom")
                           +map.get("Teacher")+map.get("Weekday")+map.get("Xingqi")+"\n");
                          System.out.println(result);
                       }
                      
                      
                      if(week=="1"){
                        listView=(ListView) findViewById(R.id.listView1);
    listView.post(new Runnable() {
    @Override
    public void run() {
    SimpleAdapter simpleAdapter = new SimpleAdapter(ClassSheet2.this, list,
    R.layout.csoutput,new String[] { "Jieci", "CourseName","ClassRoom",
    "Teacher", "Weekday" }, new int[] { R.id.Jieci,R.id.CourseName, 
    R.id.ClassRoom,R.id.Teacher, R.id.Weekday});
    listView.setAdapter(simpleAdapter);
    }
    });
                      }
                      
                      if(week=="2"){
                          listView=(ListView) findViewById(R.id.listView2);
       listView.post(new Runnable() {
       @Override
       public void run() {
       SimpleAdapter simpleAdapter = new SimpleAdapter(ClassSheet2.this, list,
       R.layout.csoutput,new String[] { "Jieci", "CourseName","ClassRoom",
       "Teacher", "Weekday","Xingqi" }, new int[] { R.id.Jieci,R.id.CourseName, 
       R.id.ClassRoom,R.id.Teacher, R.id.Weekday });
       listView.setAdapter(simpleAdapter);
       }
       });
                        }
                      
                      if(week=="3"){
                          listView=(ListView) findViewById(R.id.listView3);
       listView.post(new Runnable() {
       @Override
       public void run() {
       SimpleAdapter simpleAdapter = new SimpleAdapter(ClassSheet2.this, list,
       R.layout.csoutput,new String[] { "Jieci", "CourseName","ClassRoom",
       "Teacher", "Weekday" }, new int[] { R.id.Jieci,R.id.CourseName, 
       R.id.ClassRoom,R.id.Teacher, R.id.Weekday});
       listView.setAdapter(simpleAdapter);
       }
       });
                        }
                      
                      if(week=="4"){
                          listView=(ListView) findViewById(R.id.listView4);
       listView.post(new Runnable() {
       @Override
       public void run() {
       SimpleAdapter simpleAdapter = new SimpleAdapter(ClassSheet2.this, list,
       R.layout.csoutput,new String[] { "Jieci", "CourseName","ClassRoom",
       "Teacher", "Weekday"}, new int[] { R.id.Jieci,R.id.CourseName, 
       R.id.ClassRoom,R.id.Teacher, R.id.Weekday});
       listView.setAdapter(simpleAdapter);
       }
       });
                        }
                      if(week=="5"){
                          listView=(ListView) findViewById(R.id.listView5);
       listView.post(new Runnable() {
       @Override
       public void run() {
       SimpleAdapter simpleAdapter = new SimpleAdapter(ClassSheet2.this, list,
       R.layout.csoutput,new String[] { "Jieci", "CourseName","ClassRoom",
       "Teacher", "Weekday"}, new int[] { R.id.Jieci,R.id.CourseName, 
       R.id.ClassRoom,R.id.Teacher, R.id.Weekday});
       listView.setAdapter(simpleAdapter);
       }
       });
                        }
                      if(week=="6"){
                          listView=(ListView) findViewById(R.id.listView6);
       listView.post(new Runnable() {
       @Override
       public void run() {
       SimpleAdapter simpleAdapter = new SimpleAdapter(ClassSheet2.this, list,
       R.layout.csoutput,new String[] { "Jieci", "CourseName","ClassRoom",
       "Teacher", "Weekday"}, new int[] { R.id.Jieci,R.id.CourseName, 
       R.id.ClassRoom,R.id.Teacher, R.id.Weekday});
       listView.setAdapter(simpleAdapter);
       }
       });
                        }                 
                      if(week=="7"){
                          listView=(ListView) findViewById(R.id.listView7);
       listView.post(new Runnable() {
       @Override
       public void run() {
       SimpleAdapter simpleAdapter = new SimpleAdapter(ClassSheet2.this, list,
       R.layout.csoutput,new String[] { "Jieci", "CourseName","ClassRoom",
       "Teacher", "Weekday" }, new int[] { R.id.Jieci,R.id.CourseName, 
       R.id.ClassRoom,R.id.Teacher, R.id.Weekday });
       listView.setAdapter(simpleAdapter);
       }
       });
                        }
                      
                      }
                 else  
                  {  
                      result = "无此班级.";   
                 }   
              }   
              catch (Exception e)   
              {   
                 result = "调用WebService错误.";  
                 e.printStackTrace();
              }         
              return null;   
          }   
      
      }   
        
        
        }
    这是Activity C,没什么特殊处理呀。
      

  5.   


    你有重写对BACK键的处理么 
    第一次点BACK,从C到B毫无疑问,第二次点BACK,实际上不期望返回上一个acitvity C (从C BACK回来的),而是系统任务栈里的上一个 A。
      

  6.   

    那意思就是说,要重写对back键的处理吗?
      

  7.   


    正常情况下是不用的 
    误跳到C 如果不是你重写了BACK,那么就是对任务栈干扰操作
      

  8.   

    你是不是Actiivity C放到了堆栈最顶端?