2011-12-26 43 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(); 
相关问题