1

我正在使用以下类在国家/地区的列表视图中进行搜索

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”开头的国家,但是当我按下例如从搜索中获取的第二个国家时,它会打开具有第二个索引的国家“国家名称”数组。如何解决此问题并从搜索中获取所选国家/地区的信息?

希望有人明白我的意思。提前致谢。

4

1 回答 1

1

我通过替换这条线解决了它

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

通过这条线

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