1

次のクラスを使用して、国のlistViewで検索しています

package com.androidhive.androidlistviewwithsearch;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.inputmethod.InputMethodManager;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class MainActivity extends Activity {

private ListView lv;
SimpleCursorAdapter cursorAdapter;
ArrayAdapter<String> adapter;
EditText inputSearch;
private SQLiteAdapter mySQLiteAdapter;
ArrayList<HashMap<String, String>> productList;
public static final String COUNTRY_NAME = "COUNTRY_NAME";
String[] countryName;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mySQLiteAdapter = new SQLiteAdapter(this);
    mySQLiteAdapter.openToWrite();

    int isEmpty = mySQLiteAdapter.isEmpty();
    if (isEmpty == 0) {

        mySQLiteAdapter.insert("Afghanistan", "102", "119", "119");
        mySQLiteAdapter.insert("Albania", "127", "128", "129");
        mySQLiteAdapter.insert("Algeria", "14", "14", "17");            
        mySQLiteAdapter.insert("American Samoa", "911", "911", "911");
        mySQLiteAdapter.insert("Andorra", "118", "118", "110");
        mySQLiteAdapter.insert("Angola", "118", "118", "110");
        mySQLiteAdapter.insert("Panama", "911", "911", "911");
        mySQLiteAdapter.insert("Papua New Guinea /Port Moresby", "", "110", "000");
        mySQLiteAdapter.insert("Yemen", "191",  "191", "194");
        mySQLiteAdapter.insert("Zambia", "991/112", "993/112",  "999/112");
        mySQLiteAdapter.insert("Zimbabwe",  "994/999",  "993/999",  "995/999");

    }

    mySQLiteAdapter = new SQLiteAdapter(this);
    mySQLiteAdapter.openToRead();
    Cursor cursor = mySQLiteAdapter.queueAll();
    startManagingCursor(cursor);

    List<String> list = new ArrayList<String>();

    if (cursor.moveToFirst()) {

        while (cursor.isAfterLast() == false) {

            String countries = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.COUNTRIES_CONTENT)).toString().trim();
            System.out.println("countries: " + countries);

            list.add(countries);

            cursor.moveToNext();
        }

    }


    countryName = new String[list.size()];
    countryName = list.toArray(countryName);

    mySQLiteAdapter.close();

    lv = (ListView) findViewById(R.id.list_view);
    inputSearch = (EditText) findViewById(R.id.inputSearch);

    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, countryName);

    lv.setAdapter(adapter);

    lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parentView, View childView, int position, long id) {

            Intent intent ;
            Bundle b = new Bundle();                

            b.putString(COUNTRY_NAME, countryName[position]);

            intent = new Intent(getApplicationContext(), CountryNumbers.class);
            intent.putExtras(b);
            startActivity(intent);
            finish();

        }
    });


    inputSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            MainActivity.this.adapter.getFilter().filter(cs);   
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub                          
        }
    });

}

}

このコードはうまく機能し、検索を実行します。また、選択した国に関する情報を含むアクティビティを開く setOnItemClickListener も実行します。しかし、検索して「E」と書いた場合、リストが変更され、「E」で始まる国が表示されますが、たとえば検索から取得した 2 番目の国を押すと、2 番目のインデックスで国が開きます「国名」配列。この問題を解決して、選択した国の情報を検索から取得するにはどうすればよいですか?

誰かが私の意味を理解してくれることを願っています。前もって感謝します。

4

1 に答える 1

1

この行を置き換えることで解決しました

 b.putString(COUNTRY_NAME, countryName[position]);

この行で

b.putString(COUNTRY_NAME, adapter.getItem(position));
于 2013-06-29T13:08:25.137 に答える