2

リストビューに連絡先のすべての名前を表示する Android アプリケーションを開発しています。

連絡先のリストビューをクリックすると、その連絡先のそれぞれの番号を別のリストビューに表示する必要があります。

ここでの問題は、すべての番号をバンドルして別のアクティビティに送信し、バンドルも受信しましたが、受信したバンドルはシリアライズ可能なオブジェクトです。

したがって、Listview に表示するには、それを Hashmap の Arraylist に変換する必要があります。これどうやってするの?

コードは次のとおりです。

アクティビティの送信:

HashMap<String, String> Numbermap = new HashMap<String, String>();

Numbermap.put("numb",number);
Numbermap.put("type",type);

NumberList.add(Numbermap);

Intent intent = new Intent (ContactNames.this,ContactsPhoneNumbers.class);

intent.putExtra("map", NumberList);


startActivity(intent);

受信アクティビティ:

    Serializable Numbermap = new HashMap<String, String>();

    //  contNum = (TextView)findViewById(R.id.ContactNumber);

    Bundle bundle = getIntent().getExtras();

    Intent intent = getIntent();

    if(bundle!=null)
    {
        Numbermap = bundle.getSerializable("map");
    }
4

3 に答える 3

3

NumberListのインスタンスであるオブジェクトを「map」キーでインテントに入れているArrayListと思います。しかし、アクティビティContactsPhoneNumbersでは、キー「マップ」を使用して HashMap のインスタンスを取得しようとしていますが、これは正しくありません。

これがあなたがすべきことです:

ArrayList<HashMap<String, String>> numberList = null;
Bundle bundle = getIntent().getExtras();
Intent intent = getIntent();
if(bundle!=null)
{
    numberList = (ArrayList<HashMap<String, String>>) bundle.getSerializable("map");
}
于 2013-06-21T11:14:44.737 に答える
2

次の方法でコードを確認しました。

アクティビティの送信:

    HashMap<String, String> Numbermap = new HashMap<String, String>();
    ArrayList<HashMap<String, String>> NumberList = new ArrayList<HashMap<String, String>>();
    Numbermap.put("numb", "1");
    Numbermap.put("type", "type");
    NumberList.add(Numbermap);
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    intent.putExtra("map", NumberList);
    startActivity(intent);

受信アクティビティ:

ArrayList<HashMap<String, String>> NumberList = new ArrayList<HashMap<String, String>>();
        Bundle extras = getIntent().getExtras();
        NumberList = (ArrayList<HashMap<String, String>>) extras.get("map");
        System.out.println(NumberList.get(0));

私のlogcat出力は次のとおりです。

06-21 17:14:59.729: I/System.out(1609): {numb=1, type=type}

これはあなたを助けるかもしれません。

于 2013-06-21T11:17:21.450 に答える
0

Serializableオブジェクトは、他のオブジェクトによって受信されると、同じオブジェクト タイプに逆シリアル化されますActivity。にキャストするだけArrayListです:

ArrayList<HashMap<String, String>> numberList = (ArrayList<HashMap<String, String>>) bundle.getSerializable("map");

注:ジェネリック型をキャストしているため、コンパイラの警告が表示されます。タイプが両側で一致していることを確認する限り、無視または抑制できます。一般に、ジェネリック型をキャストするとエラーが発生しやすくなります。より良い解決策は、データを含むシリアル化可能なクラスを使用することです。これは、よりタイプ セーフです。

public class MyNumbersClass implements Serializable {
    private static final long serialVersionUID = 1L;
    private List<Map<String,String>> data;

    public MyNumbersClass(List<Map<String,String>> data) {
        this.data = data;
    }

    public MyNumbersClass() {
    }

    public List<Map<String,String>>> getData() {
        return data;
    }
}

ArrayList次に、このクラスのインスタンスを作成し、コンストラクターに渡します。Serializable反対側では、 toをキャストしてMyNumbersClass使用getData()し、リストを取得します。

于 2013-06-21T11:25:18.557 に答える