gpt4 book ai didi

android - Android 自定义 ListView 中的搜索功能

转载 作者:行者123 更新时间:2023-11-29 17:57:20 25 4
gpt4 key购买 nike

我有 CursorAdapter 来显示数据库中的数据。现在,我想将搜索功能添加到自定义 ListView 。所以,我尝试了这个。但是,这是行不通的。

 searchOption.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int start, int before, int count) {
// TODO Auto-generated method stub

AbstractActivity.this.cursorAdapter.getFilter().filter(cs);
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub

}

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

}
});

这是适配器代码

public class AbstractCursorAdapter extends CursorAdapter {
Cursor cursorOne;

String getName;

@SuppressWarnings("deprecation")
public AbstractCursorAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
TextView title = (TextView)view.findViewById(R.id.abTitle);

title.setText(cursor.getString(cursor.getColumnIndexOrThrow("TITLE")));
;

TextView topic = (TextView)view.findViewById(R.id.abTopic);

topic.setText(cursor.getString(cursor.getColumnIndexOrThrow("TOPIC")));

TextView type = (TextView)view.findViewById(R.id.abType);

type.setText(cursor.getString(cursor.getColumnIndexOrThrow("TYPE")));

String value = cursor.getString(cursor.getColumnIndexOrThrow("_id"));

String sqlQuery = "select abstracts_item._id AS ID,abstract_author.NAME AS NAME from abstracts_item,abstract_author,authors_abstract where abstracts_item._id = authors_abstract.abstractsitem_id and abstract_author._id = authors_abstract.abstractauthor_id and ID = "
+ value;


cursorOne = DatabaseHelper.database.rawQuery(sqlQuery, null);

if (cursorOne != null) {
cursorOne.moveToFirst();
do {

if (cursorOne.getPosition() == 0) {

getName = cursorOne.getString(cursorOne.getColumnIndexOrThrow("NAME"));

} else {

getName = getName + ","
+ cursorOne.getString(cursorOne.getColumnIndexOrThrow("NAME"));

}

} while (cursorOne.moveToNext());
}

TextView authorNames = (TextView)view.findViewById(R.id.SubTitle);

String formatterNames = "";

String[] namesArray = getName.split(",");

// Log.e("Length", String.valueOf(namesArray.length));

if (namesArray.length > 1) {
for (int i = 0; i < namesArray.length; i++) {

if (i == namesArray.length - 1) {
formatterNames = formatterNames + " & " + namesArray[i];
}else if (i == 0){
formatterNames = formatterNames +namesArray[i];
}
else {
formatterNames = formatterNames + " , " +namesArray[i];
}
}


/*
* Get Width
*/

WindowManager WinMgr = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
int displayWidth = WinMgr.getDefaultDisplay().getWidth();

Paint paint = new Paint();
Rect bounds = new Rect();

int text_height = 0;
int text_width = 0;

//paint.setTypeface(Typeface.DEFAULT);

paint.getTextBounds(formatterNames, 0, formatterNames.length(), bounds);

text_height = bounds.height();
text_width = bounds.width();


Log.e("SIZE", "Text =" + String.valueOf(text_width) + "------" +"Layout = " + String.valueOf(displayWidth));

if(text_width > displayWidth){

String output= formatterNames.split(",")[0] + " et al. " ;
authorNames.setText(output);

}else{
authorNames.setText(formatterNames.replaceAll("((?:^|[^A-Z.])[A-Z])[a-z]*\\s(?=[A-Z])",
"$1."));
}


} else {

authorNames
.setText(getName.replaceAll("((?:^|[^A-Z.])[A-Z])[a-z]*\\s(?=[A-Z])", "$1."));
}
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup viewgroup) {
// TODO Auto-generated method stub
LayoutInflater inflater = LayoutInflater.from(viewgroup.getContext());
View returnView = inflater.inflate(R.layout.abstract_content, viewgroup, false);
return returnView;
}



}

如果你们帮助找出我的代码中的问题或者我如何将搜索功能添加到自定义 ListView ,我将很高兴。

最佳答案

尝试使用它

adapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
// fetch all query data by input String
// fetchDataByName take input String when search
return dbHelper.fetchDataByName(constraint.toString());
}
});

public void onTextChanged(CharSequence s, int start, int before,
int count) {
AbstractActivity.this.cursorAdapter.getFilter().filter(cs);
}

关于android - Android 自定义 ListView 中的搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18460139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com