如何在android中动态搜索TextView上显示的数据?

如何在android中动态搜索TextView上显示的数据?,android,listview,search,Android,Listview,Search,我在搜索列表视图时遇到问题。在我的活动中,我在列表中显示了一些数据,现在我在列表顶部有一个搜索栏。我想实现的是,当我在搜索栏中键入时,listview中的数据应该根据搜索结果进行调整。我使用了TextWatcher,但问题是我在列表视图中填充数据的ArrayList是自定义类型的 public class FRNews { // Private Members START private long id = 0; private String headline

我在搜索列表视图时遇到问题。在我的活动中,我在列表中显示了一些数据,现在我在列表顶部有一个搜索栏。我想实现的是,当我在搜索栏中键入时,listview中的数据应该根据搜索结果进行调整。我使用了TextWatcher,但问题是我在列表视图中填充数据的ArrayList是自定义类型的

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包含对象而不是字符串。我认为您的过程可能会给出正确的结果,但这不是满足您要求的更好方法。请检查我的答案,它可能暂时有用。