如何在android中动态搜索TextView上显示的数据?
我在搜索列表视图时遇到问题。在我的活动中,我在列表中显示了一些数据,现在我在列表顶部有一个搜索栏。我想实现的是,当我在搜索栏中键入时,listview中的数据应该根据搜索结果进行调整。我使用了TextWatcher,但问题是我在列表视图中填充数据的ArrayList是自定义类型的如何在android中动态搜索TextView上显示的数据?,android,listview,search,Android,Listview,Search,我在搜索列表视图时遇到问题。在我的活动中,我在列表中显示了一些数据,现在我在列表顶部有一个搜索栏。我想实现的是,当我在搜索栏中键入时,listview中的数据应该根据搜索结果进行调整。我使用了TextWatcher,但问题是我在列表视图中填充数据的ArrayList是自定义类型的 public class FRNews { // Private Members START private long id = 0; private String headline
public class FRNews {
// Private Members START
private long id = 0;
private String headline = "";
private String detail = "";
private String submit_date = Configuration.DEFAULT_DATE;
//Private Members END
// Getter/Setter START
public void setId(long id){
this.id = id ;
}
public void setHeadline(String headline){
this.headline = headline ;
}
public void setDetail(String detail){
this.detail = detail;
}
public void setSubmitDate(String submit_date){
this.submit_date = submit_date;
}
public long getId(){
return this.id ;
}
public String getHeadline(){
return this.headline ;
}
public String getDetail(){
return this.detail;
}
public String getSubmitDate(){
return this.submit_date;
}
// Getter/Setter END
}
这是自定义类型
public class FRNews {
// Private Members START
private long id = 0;
private String headline = "";
private String detail = "";
private String submit_date = Configuration.DEFAULT_DATE;
//Private Members END
// Getter/Setter START
public void setId(long id){
this.id = id ;
}
public void setHeadline(String headline){
this.headline = headline ;
}
public void setDetail(String detail){
this.detail = detail;
}
public void setSubmitDate(String submit_date){
this.submit_date = submit_date;
}
public long getId(){
return this.id ;
}
public String getHeadline(){
return this.headline ;
}
public String getDetail(){
return this.detail;
}
public String getSubmitDate(){
return this.submit_date;
}
// Getter/Setter END
}
这是我的类,它正在调用数组适配器并使用TextWatcher搜索listview
public class FRNewsList extends ListActivity {
public static ArrayList<FRNews> newsList = new ArrayList<FRNews>();
public static ArrayList<FRNews> tempList = new ArrayList<FRNews>();
private int detailId = 0;
private ProgressDialog progDialog;
private FRCustomAdapterLatestNews newsAdapter;
private ListView listView;
private EditText etSearch;
private TextView tvSeeAllNews;
private String headline;
int textLength = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_home_main);
listView = (ListView) findViewById(android.R.id.list);
etSearch = (EditText) findViewById(R.id.et_search_news);
tvSeeAllNews = (TextView) findViewById(R.id.tv_news_see_all);
if (newsList == null) {
newsList = new ArrayList<FRNews>();
}
if (tempList == null) {
tempList = new ArrayList<FRNews>();
}
putNewsInView();
// listView.setAdapter(new ArrayAdapter<FRNews>(this,
// android.R.layout.simple_list_item_1, tempList));
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View view,
int position, long id) {
setDetailId(position);
int newsId = getDetailId();
Intent i = new Intent(FRNewsList.this,
FRLatestNewsDetailActivity.class);
i.putExtra("id", newsId);
// Create the view using FirstGroup's LocalActivityManager
View v = FRNewsDetailActivityGroup.group
.getLocalActivityManager()
.startActivity("news_detail",
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
.getDecorView();
// Again, replace the view
FRNewsDetailActivityGroup.group.replaceView(v);
}
});
etSearch.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
getNewsDbContent();
textLength = count;
tempList.clear();
// int a = newsList.size();
if (s.length() > 0) {
for (int i = 0; i < newsList.size(); i++) {
FRNews searchNews = newsList.get(i);
String headlineSearch = searchNews.getHeadline();
if (textLength <= headlineSearch.length()) {
if (etSearch
.getText()
.toString()
.equalsIgnoreCase(
(String) headlineSearch
.subSequence(0, textLength))) {
tempList.add(i, searchNews);
}
}
}
listView.setAdapter(new ArrayAdapter<FRNews>(
FRNewsList.this,
android.R.layout.simple_list_item_1, tempList));
} else
listView.setAdapter(new ArrayAdapter<FRNews>(
FRNewsList.this,
android.R.layout.simple_list_item_1, newsList));
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
}
});
tvSeeAllNews.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(FRNewsList.this, FRAllNews.class);
// Create the view using FirstGroup's LocalActivityManager
View view = FRNewsDetailActivityGroup.group
.getLocalActivityManager()
.startActivity("news_all",
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
.getDecorView();
// Again, replace the view
FRNewsDetailActivityGroup.group.replaceView(view);
}
});
}
private void putNewsInView() {
// public void run() {
getNewsDbContent();
newsAdapter = new FRCustomAdapterLatestNews(getApplicationContext(),
R.layout.tab_home_row, R.id.tv_news_date, tempList);
setListAdapter(newsAdapter);
}
private void getNewsDbContent() {
newsList.clear();
tempList.clear();
FRNewsTable getNews = new FRNewsTable(FRNewsList.this);
newsList = getNews.getNewsFromDB("news_id,headline,detail,submit_date");
// setNewsList(newsList);
tempList = newsList;
getNews.CloseDB();
}
public int getDetailId() {
return detailId;
}
public void setDetailId(int detailId) {
this.detailId = detailId;
}
}
公共类FRNewsList扩展了ListActivity{
public static ArrayList newsList=new ArrayList();
public static ArrayList templast=new ArrayList();
私有int-detailId=0;
私有进程对话;
私有FRCustomAdapter最新新闻适配器;
私有列表视图列表视图;
私人编辑文本搜索;
私有文本视图tvSeeAllNews;
私有字符串标题;
int textLength=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.tab\u home\u main);
listView=(listView)findViewById(android.R.id.list);
etSearch=(EditText)findViewById(R.id.et_search_news);
tvSeeAllNews=(TextView)findviewbyd(R.id.tv\u news\u see\u all);
如果(新闻列表==null){
newsList=newarraylist();
}
if(templast==null){
templast=newarraylist();
}
putNewsInView();
//setAdapter(新的ArrayAdapter(此,
//android.R.layout.simple_list_item_1,templast));
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView arg0,视图,
内部位置,长id){
setDetailId(位置);
int newsId=getDetailId();
意向i=新意向(FRNewsList.this,
fRatestNewsDetailActivity.class);
i、 putExtra(“id”,newsId);
//使用FirstGroup的LocalActivityManager创建视图
视图v=FRNewsDetailActivityGroup.group
.getLocalActivityManager()
.startActivity(“新闻详情”,
i、 添加标志(意图、标志、活动、清除、顶部))
.getDecorView();
//再次替换视图
FRNewsDetailActivityGroup.group.replaceView(v);
}
});
etSearch.addTextChangedListener(新的TextWatcher(){
public void onTextChanged(字符序列,int start,int before,
整数计数){
getNewsDbContent();
textLength=计数;
圣殿骑士;
//int a=newsList.size();
如果(s.长度()>0){
对于(int i=0;i 如果(text长度您可以使用自动完成文本视图来满足此要求。为什么使用ListView
AutoCompleteTextView仅用于此目的。只需查看下面链接中的可用代码,您将了解如何使用AutoCompleteTextView
即使在访问链接后,您也无法理解,请随时询问我。尝试在TextChangedListener
中写入您的代码。请回答我的问题,如果您的listview包含所有国家名称、用户键入的字母表A,则listview必须显示所有以字母A或A开头的国家。是或否??是我正在尝试做的是,但我的ArrayList包含对象而不是字符串。我认为您的过程可能会给出正确的结果,但这不是满足您要求的更好方法。请检查我的答案,它可能暂时有用。