2011-12-26 20 views
1

以下是我正在使用的代碼。點擊列表項目後,我收到運行時錯誤。我應該轉到下一個屏幕,但出現錯誤:the application has stopped unexpectedly。你能告訴我什麼是錯的嗎?如何使用Intent和ListActivity單擊ListItem後在android中更改屏幕

package com.pxr.tutorial.xmltest; 

import java.util.ArrayList; 
import java.util.HashMap; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 

public class Main extends ListActivity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     myrequest(); 
    } 
    void myrequest() 
    { 

     setContentView(R.layout.myrequest); 

     ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 


     String xml = XMLfunctions.getXML("http://10.0.2.2/ss.htm"); 
     Document doc = XMLfunctions.XMLfromString(xml); 

     int numResults = XMLfunctions.numResults(doc); 

     if((numResults <= 0)){ 
      Toast.makeText(Main.this, "Error", Toast.LENGTH_LONG).show(); 
      finish(); 
     } 

     NodeList nodes = doc.getElementsByTagName("result"); 

     for (int i = 0; i < nodes.getLength(); i++) {       
      HashMap<String, String> map = new HashMap<String, String>();  

      Element e = (Element)nodes.item(i); 
      map.put("id", XMLfunctions.getValue(e, "id")); 
      map.put("name", XMLfunctions.getValue(e, "id") + "-" + XMLfunctions.getValue(e, "name") + " :"); 
      mylist.add(map);    
     }  


     ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, 
         new String[] { "name"}, 
         new int[] { R.id.item_title }); 

     setListAdapter(adapter); 

     final ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {    
       @SuppressWarnings("unchecked") 
       HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);     
       Toast.makeText(Main.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_LONG).show(); 

       Main.this.finish(); 
       Intent i = new Intent(Main.this, Details.class); 
       startActivity(i); 

//    details(o.get("id")); 

      } 
     }); 

    } 

    void details(String id) 
    { 
     Details dt=new Details(); 
     dt.det(id); 
//  setContentView(R.layout.details);  
    } 

} 

Details.java文件是:

package com.pxr.tutorial.xmltest; 

import android.app.Activity; 
import android.os.Bundle; 


    public class Details extends Activity 
    { 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.simple); 
     } 
} 

回答

2

因爲一切都與您的代碼似乎是正確的,我的猜測是,你沒有權限在AndroidManifest.xml中運行你的詳細活動。

添加行

<activity android:name=".Details"></activity> 

到您的文件AndroidManifest.xml應該做的伎倆!

編輯: 此外,行Main.this.finish();也可能導致問題。如果您已經完成了前面的內容,請嘗試刪除該行。

+0

ypiii .. !!!它的工作.. thanx很多..米從一個星期做不能GT ... !!!十分感謝..!!! – 2011-12-26 12:13:29

0

試試這個......
在開始另一個活動後總是完成()活動。

Intent i = new Intent(Main.this, Details.class); 
startActivity(i); 
Main.this.finish(); 
0

我相信,這裏是在服務烏爾要求 Main.this.finish();

由於完成後()方法調用控制直接跳轉到生命週期方法的onStop()的問題 - >的onDestroy()..所以它不可能對我們的代碼執行下面的行...

2
Intent i = new Intent(Main.this, Details.class); 

start Activity(i); 

finish(); 
+0

你能解釋'(Main.this,Details.class)'中發生了什麼嗎?你基本上是說從主要活動轉到細節活動嗎?使用.this和.class有什麼區別? – 2013-07-27 23:31:56

1
start Activity(new Intent(Main.this, Details.class)); 
finish(); 
相關問題