如何将搜索过滤器添加到从数据库填充的列表视图中?

时间:2013-07-22 15:23:22

标签: android listview android-listview android-arrayadapter simplecursoradapter

我使用了一个sqlite数据库来填充listview。

我是java和android开发的新手,我搜索但无法找到问题的解决方案。

我现在想为用户添加过滤器文本工具,listview应该动态更改以仅显示与列表视图上方的edittext字段中键入的内容相匹配的项目。

我发布了确切的工作代码,没有添加任何edittext文本字段以防止混淆。请帮我解决这个问题。

XML(布局文件):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#125156"
    android:orientation="vertical" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_marginBottom="13sp"
        android:layout_marginLeft="13sp"
        android:layout_marginRight="13sp"
        android:layout_marginTop="13sp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:listSelector="@drawable/yellow"
        android:saveEnabled="true"
        android:cacheColorHint="#FFFFFF"
        android:divider="#125156"
        android:dividerHeight="10.0sp"
        android:fastScrollEnabled="true"
        android:footerDividersEnabled="true"
        android:headerDividersEnabled="true"
        android:textAlignment="center"
        android:textColor="#FFFFFF" >

    </ListView>

</LinearLayout>

相应的Java代码:

package com.example.uopengineering;

import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class PrepopSqliteDbActivity extends ListActivity 
{
    private static final String DB_NAME = "umangdb.db";
    private SQLiteDatabase database;
    private ListView listView;
    private ArrayList<String> programlist;
    private String query;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.programlist);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        Intent intent=getIntent();
        query=intent.getStringExtra(ACTIVITY_SERVICE);
        overridePendingTransition(R.anim.anim_in,R.anim.anim_out);


        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();

        fillProgramList();
        setUpList();      
    }

    private void setUpList() 
    {
        setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, programlist));
        listView = getListView();

        listView.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> parent, View view,int position,long id) 
            {
                 Intent intent = new Intent(PrepopSqliteDbActivity.this, viewProgramActivity.class);
                 String x=(String) listView.getItemAtPosition(position);
                 Cursor myCursor=database.rawQuery(query+" and prog_name ="+"'"+x+"'",null);
                 myCursor.moveToFirst();
                 String y=myCursor.getString(0);
                 myCursor.close();

                 intent.putExtra("myextra", y);
                 startActivity(intent);
            }
        });
    }


    private void fillProgramList() 
    {
        programlist = new ArrayList<String>();
        Cursor myCursor = database.rawQuery(query+" order by prog_name",null);
        myCursor.moveToFirst();
        if(!myCursor.isAfterLast()) 
        {
            do 
            {
                String programname = myCursor.getString(3);
                programlist.add(programname);
            } 
            while (myCursor.moveToNext());
        }
        myCursor.close();
    }

    @Override
    public void onBackPressed() 
    {
        super.onBackPressed();
        overridePendingTransition(R.anim.anim_in2, R.anim.anim_out2);
    }
}

1 个答案:

答案 0 :(得分:1)

您要实现的代码可以使用Android中的AutoCompleteTextView来完成。 它根据在文本字段中输入的字符串建议ArrayList中的文本项。

这是一个可以帮助你的例子。

http://www.javatpoint.com/android-autocompletetextview-example

您可以询问是否有任何进一步的疑问。