Android “正在接近”;onTextChanged“;

Android “正在接近”;onTextChanged“;,android,eclipse,mobile,Android,Eclipse,Mobile,我正在开发一个从我的Web服务器接收图像和字符串的应用程序。 这是有效的。但是我想在listView中添加一个搜索。这是我的ApplicationActivity.java package com.fireplace.market.fads; import java.util.ArrayList; import java.util.List; import com.actionbarsherlock.app.SherlockListActivity; import com.actionb

我正在开发一个从我的Web服务器接收图像和字符串的应用程序。 这是有效的。但是我想在listView中添加一个搜索。这是我的ApplicationActivity.java

package com.fireplace.market.fads;

import java.util.ArrayList; 
import java.util.List; 

import com.actionbarsherlock.app.SherlockListActivity;
import com.actionbarsherlock.view.MenuItem;
import com.fireplace.market.fads.adapter.MyCustomArrayAdapter;
import com.fireplace.market.fads.database.GetDataFromDB;
import com.fireplace.market.fads.model.Model;

import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter; 
import android.widget.EditText;

public class ApplicationsActivity extends SherlockListActivity {

    EditText inputSearch;
    ArrayAdapter<String> adapter;

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R. layout.contact_list); 

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        inputSearch = (EditText) findViewById(R.id.inputSearchApps);

        final List<Model> list = new ArrayList<Model>();
        /** This block is for getting the image url to download from the server **/ 
        final GetDataFromDB getvalues = new GetDataFromDB(); 
        final ProgressDialog dialog = ProgressDialog.show(ApplicationsActivity.this, "", "Gettting information", true);

        new Thread (new Runnable() { public void run() {
            String response = getvalues.getImageURLAndDesciptionFromDB(); System.out.println("Response : " + response);
            dismissDialog(dialog); 
            if (!response.equalsIgnoreCase("")) {
                if (!response.equalsIgnoreCase("error")) { 
                    dismissDialog(dialog);
                // Got the response, now split it to get the image Urls and description 
                String all[] = response.split("##"); for(int k = 0; k < all.length; k++){
                    String urls_and_desc[] = all[k].split(",");
                    // urls_and_desc[0] contains image url and [1] -> description. 
                    list.add(get(urls_and_desc[1],urls_and_desc[0])); 
                    } 
                } 
                }
            else { dismissDialog(dialog); } } }).start();
        /*************************** GOT data from Server ********************************************/ 
        ArrayAdapter<Model> adapter = new MyCustomArrayAdapter(this, list);
        setListAdapter(adapter); 

        //Making the list searchable
                inputSearch.addTextChangedListener(new TextWatcher() {

                    @Override
                    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                        // When user changed the Text
                        ApplicationsActivity.this.adapter.getFilter().filter(cs);
                    }

                    @Override
                    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                            int arg3) {
                        // TODO Auto-generated method stub

                    }

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

    public void dismissDialog(final ProgressDialog dialog){
        runOnUiThread(new Runnable() {
        public void run() {
            dialog.dismiss(); 
            } 
        }); 
        } 
    private Model get(String s, String url) {
        return new Model(s, url); 
        } 

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            super.finish();
            break;
        default:
            return super.onOptionsItemSelected(item);
        }
        return true;
    }
}

因此,正如LogCat所说,当我按下一个键时会出现问题。在本例中,这是键盘

您尚未初始化
阵列适配器在您的活动中。
只需在
onCreate()
中初始化它,就像
adapter=newarrayadapter()

我认为这是唯一的问题。

替换

ArrayAdapter<Model> adapter = new MyCustomArrayAdapter(this, list);

并将适配器类型更改为
ArrayList
。否则,实例变量适配器将不会初始化。

如果您正在更改筛选器中的文本值,您将得到一个无限循环:您应该声明一个全局布尔变量,如下所示:

private boolean canFilter = true;
然后在筛选调用中:

if (canFilter){
    // We don't let any filter calls to pass until this finishes
    canFilter = false;
    ApplicationsActivity.this.adapter.getFilter().filter(cs);
    canFilter = true;
}

无论如何,这只是猜测。
过滤器(CharSequence)
方法的作用是什么?

谢谢。我还更改了ArrayAdapter适配器;到阵列适配器;现在我没有FC,但当我输入一些东西时,什么也看不出来。有什么主意吗?用这个@重写public void onTextChanged(CharSequence cs,int arg1,int arg2,int arg3){if(cs!=null){ApplicationActivity.this.adapter.getFilter().filter(cs);}}我尝试使用您的代码,但仍然无效。它仍然没有显示任何结果。谢谢,我只需要编辑到,因为我在ArrayAdapter中使用的是简单地筛选列表视图项。我有另一个活动,其中有一个ListView,这是可行的,但我已经定义了ListView项。如果需要,我可以附上文件。
private boolean canFilter = true;
if (canFilter){
    // We don't let any filter calls to pass until this finishes
    canFilter = false;
    ApplicationsActivity.this.adapter.getFilter().filter(cs);
    canFilter = true;
}