Как изменить экран в Android после нажатия на ListItem с помощью Intent и ListActivity - PullRequest
1 голос
/ 26 декабря 2011

Ниже приведен код, с которым я работаю. Я получаю ошибку во время выполнения после нажатия на элемент списка. Я должен перейти к следующему экрану, но я получаю ошибку: the application has stopped unexpectedly. Не могли бы вы сказать мне, что не так?

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);
        }
}

Ответы [ 5 ]

2 голосов
/ 26 декабря 2011
Intent i = new Intent(Main.this, Details.class);

start Activity(i);

finish();
2 голосов
/ 26 декабря 2011

Поскольку с вашим кодом все кажется правильным, я полагаю, у вас нет прав для запуска вашей деятельности "Детали" в вашем AndroidManifest.xml.

Добавление строки

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

к вашему файлу AndroidManifest.xml должно сработать!

EDIT: Кроме того, строка Main.this.finish(); также может вызывать проблемы. Если вы уже сделали предыдущий, попробуйте удалить эту строку.

1 голос
/ 12 марта 2013
start Activity(new Intent(Main.this, Details.class));
finish();
0 голосов
/ 26 декабря 2011

Я считаю, что здесь есть проблема в удовлетворении ваших требований Main.this.finish();

Как и после того, как управление вызовом метода finish () напрямую переходит к методу жизненного цикла onStop () -> onDestroy () .. поэтому код ur не может выполнить следующие строки ...

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

0 голосов
/ 26 декабря 2011

Попробуйте это ...
Всегда завершать () действие после запуска другого действия.

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