Android “正在接近”;onTextChanged“;
我正在开发一个从我的Web服务器接收图像和字符串的应用程序。 这是有效的。但是我想在listView中添加一个搜索。这是我的ApplicationActivity.javaAndroid “正在接近”;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
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;
}