2011-12-26 6 views
1

以下は私が作業しているコードです。リストアイテムをクリックした後にランタイムエラーが発生します。私は次の画面に行く必要がありますが、エラー:the application has stopped unexpectedlyが表示されます。何が間違っているのか教えてください。IntentとListActivityを使用してListItemをクリックした後、アンドロイドで画面を変更する方法

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 .. !!!それは働いている..やっぱり、たくさん..週にはやっているからねbt couldnt gt ... !!!ありがとうございます..!!! –

0

お試しください...
他のアクティビティを開始した後、常にfinish()アクティビティを終了してください。

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

私はここで終了()メソッド呼び出しの制御は、直接ライフサイクルメソッドonStop()にジャンプした後のようウル要件 Main.this.finish();

にサービスを提供するの問題であることを信じている - > onDestroy()..ので、次の行を実行するためのウルのコードのためにそのことはできません...

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

start Activity(i); 

finish(); 
+0

'(Main.this、Details.class)'で何が起こっているのか説明できますか?基本的にメインアクティビティからディテールアクティビティに移行すると言っていますか?そして、これと.classを使うことの違いは何ですか? –

1
start Activity(new Intent(Main.this, Details.class)); 
finish(); 
関連する問題