【发布时间】:2016-04-30 03:58:53
【问题描述】:
我是编程新手,在教程的帮助下我创建了一个应用程序,您可以在其中创建货架并将它们存储在 sqlite 数据库中。在列表视图的帮助下,将显示架子。现在我在 ListView 顶部设置了一个 EditText,并使用 stackoverflow 尝试实现“动态过滤”。我认为使用“addTextChangedListener”可以做到这一点,但它根本不起作用。我尝试了近 10 种不同的方法和 4 种不同的其他教程,日日夜夜都在尝试,但没有任何效果。希望你们能帮助我。
谢谢
按照我的 DataListActivity 代码:
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Typeface;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import com.kasutwentyseven.gui4selfshelf.R;
import com.kasutwentyseven.gui4selfshelf.Scans.ScanActivity;
public class DataListActivity extends Activity {
public ListView listView;
public SQLiteDatabase sqLiteDatabase;
public ShelfDBHelper shelfDBHelper;
public Cursor cursor;
public EditText inputSearch;
public ListDataAdapter listDataAdapter; //DataSource - Adapter
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data_list_layout);
Typeface myTypeface = Typeface.createFromAsset(getAssets(), "Lobster.ttf");
TextView myTextView = (TextView) findViewById(R.id.text_yourshelfs);
myTextView.setTypeface(myTypeface);
listView = (ListView) findViewById(R.id.list_view);
listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.row_layout); //ArrayAdapter
inputSearch = (EditText)findViewById(R.id.editText_search_shelf);
listView.setAdapter(listDataAdapter);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
listDataAdapter.getFilter().filter(s);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent n = new Intent(getApplicationContext(), ScanActivity.class);
n.putExtra("postition", position);
startActivity(n);
shelfDBHelper = new ShelfDBHelper(getApplicationContext());
sqLiteDatabase = shelfDBHelper.getReadableDatabase();
cursor = shelfDBHelper.getInformations(sqLiteDatabase);
if (cursor.moveToFirst()) {
do {
String name;
name = cursor.getString(0);
DataProvider dataProvider = new DataProvider(name);
listDataAdapter.add(dataProvider);
} while (cursor.moveToNext());
}
}
还有我的适配器的代码:
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.kasutwentyseven.gui4selfshelf.R;
import java.sql.SQLDataException;
import java.util.ArrayList;
import java.util.List;
public class ListDataAdapter extends ArrayAdapter{
private List list= new ArrayList();
private static final String TAG = "Shelf ADAPTER";
private ShelfDBHelper shelfDBHelper;
private SQLiteDatabase sqLiteDatabase;
public ListDataAdapter(Context context, int resource) {
super(context, resource);
}
static class LayoutHandler
{
TextView NAME;
}
@Override
public void add(Object object){
super.add(object);
list.add(object);
}
@Override
public int getCount(){
return list.size();
}
@Override
public Object getItem(int position){
return list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LayoutHandler layoutHandler;
if(row == null){
LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.row_layout,parent,false);
layoutHandler = new LayoutHandler();
layoutHandler.NAME = (TextView)row.findViewById(R.id.text_shelf_name);
row.setTag(layoutHandler);
}else{
layoutHandler = (LayoutHandler) row.getTag();
}
DataProvider dataProvider = (DataProvider)this.getItem(position);
layoutHandler.NAME.setText(dataProvider.getName());
return row;
}
【问题讨论】:
标签: android sqlite listview search filter