Передача значения элемента, щелкнувшего в виде списка с одного экрана на другой в Android - PullRequest
0 голосов
/ 26 декабря 2011

Я пытаюсь отправить элемент, выбранный в списке, на другой экран, но получаю ошибку ...

Вот мой основной файл ...

package com.bmc;

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.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
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. */
    private Context mCtx;

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

        setContentView(R.layout.myrequest);
        mCtx = this;

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

                String selectedFromList = (String) (lv.getItemAtPosition(position));

                Intent i = new Intent(mCtx, Details.class);

                Bundle extras=new Bundle();
                extras.putSerializable("obj_to_pass", selectedFromList);
                i.putExtras(extras);

            startActivity(i);
    //          Main.this.finish();

            }
        });

    }
}   

Вот мой Details.javaфайл ...

package com.bmc;

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


public class Details extends Activity 
{

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

        EditText txt;

        Bundle extras = getIntent().getExtras();
        Object my_obj = extras.getSerializable("obj_to_pass");

        txt=(EditText) findViewById(R.id.editText_desc1);

        txt.setText((CharSequence) my_obj);
    }

}

Файл журнала ...

12-27 01:46:55.994: E/AndroidRuntime(311): FATAL EXCEPTION: main
12-27 01:46:55.994: E/AndroidRuntime(311): java.lang.ClassCastException: java.util.HashMap
12-27 01:46:55.994: E/AndroidRuntime(311):  at com.bmc.Main$1.onItemClick(Main.java:73)
12-27 01:46:55.994: E/AndroidRuntime(311):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
12-27 01:46:55.994: E/AndroidRuntime(311):  at android.widget.ListView.performItemClick(ListView.java:3382)
12-27 01:46:55.994: E/AndroidRuntime(311):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
12-27 01:46:55.994: E/AndroidRuntime(311):  at android.os.Handler.handleCallback(Handler.java:587)
12-27 01:46:55.994: E/AndroidRuntime(311):  at android.os.Handler.dispatchMessage(Handler.java:92)
12-27 01:46:55.994: E/AndroidRuntime(311):  at android.os.Looper.loop(Looper.java:123)
12-27 01:46:55.994: E/AndroidRuntime(311):  at android.app.ActivityThread.main(ActivityThread.java:4627)
12-27 01:46:55.994: E/AndroidRuntime(311):  at java.lang.reflect.Method.invokeNative(Native Method)
12-27 01:46:55.994: E/AndroidRuntime(311):  at java.lang.reflect.Method.invoke(Method.java:521)
12-27 01:46:55.994: E/AndroidRuntime(311):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-27 01:46:55.994: E/AndroidRuntime(311):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-27 01:46:55.994: E/AndroidRuntime(311):  at dalvik.system.NativeStart.main(Native Method)

После запуска вышеуказанного проекта я получаю сообщение об ошибке и сообщение с опцией «Принудительное закрытие» ...Решение тогда поможет ... !!!спасибо .. !!

1 Ответ

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

Если вы просто пытаетесь передать строку, все, что вам нужно:

intent.putExtra("myString", selectedFromList);

, а затем в следующем задании:

String s = getIntent().getStringExtra("myString", "some default value");

Как обычно, опубликуйте журналы.

Редактировать

Эти приведения не могут одновременно работать:

        String selectedFromList = (String) (lv.getItemAtPosition(position));

и

        HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   

Вам нужно привести к одному или другому, и из вашего кода похоже, что правильное приведение к HashMap.Когда у вас есть карта, вам нужно извлечь string по ее key.

Вот почему вы получаете ClassCastException в строке 73;вы кастуете HashMap на String.

...