Android列表视图中的搜索功能
我对安卓相当陌生。我正试图通过使用arrayadapter在项目列表上开发一个搜索功能,如下所示。但是搜索没有正常工作。请帮帮我 这是我的密码Android列表视图中的搜索功能,android,android-listview,android-search,Android,Android Listview,Android Search,我对安卓相当陌生。我正试图通过使用arrayadapter在项目列表上开发一个搜索功能,如下所示。但是搜索没有正常工作。请帮帮我 这是我的密码 AddToOutlet.java public class AddToOutlet extends Activity { SessionManager session; String success, cus_id, bus_id, cus_outlet; ArrayList<Item>
AddToOutlet.java
public class AddToOutlet extends Activity {
SessionManager session;
String success, cus_id, bus_id, cus_outlet;
ArrayList<Item> item;
com.amplio.MyCustomEditText editsearch;
// TextView tvcountoutlet;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.addtooutlet);
session = new SessionManager(getApplicationContext());
session.checkLoginback();
item = new ArrayList<Item>();
// get user data from session
HashMap<String, String> user = session.getUserDetails();
// ID
final String cus_id = user.get(SessionManager.KEY_ID);
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("cus_id", cus_id));
String response = null;
try {
response = LoginHttpClient
.executeHttpPost(
"http://10.0.2.2/android_api/add_to_outlet.php",
postParameters);
response = response.toString();
response = response.replaceAll("\\s+", "");
JSONObject json = new JSONObject(response);
JSONArray jArray = json.getJSONArray("customer");
for (int i = 0; i < jArray.length(); i++) {
JSONObject json_data = jArray.getJSONObject(i);
Item it = new Item();
success = json_data.getString("success");
it.setBusname(json_data.getString("bus_name"));
it.setBusid(json_data.getString("bus_id"));
it.setCusId(cus_id);
item.add(it);
}
} catch (Exception e) {
e.printStackTrace();
}
ListView lv = (ListView) findViewById(R.id.list);
final MyAdapter adapter = new MyAdapter(AddToOutlet.this,
R.layout.addtooutlet_list_item, item);
lv.setAdapter(adapter);
// Locate the EditText in listview_main.xml
editsearch = (com.amplio.MyCustomEditText) findViewById(R.id.EditText01);
// Capture Text in EditText
editsearch.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
String text = editsearch.getText().toString()
.toLowerCase(Locale.getDefault());
adapter.filter(text);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
});
}
}
下面是addtooutlet.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical" >
<!-- Editext for Search -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
android:layout_marginLeft="10dp"
android:background="#ffffff" >
<com.amplio.MyCustomEditText
android:id="@+id/EditText01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:layout_marginRight="40dp"
android:background="#00000000"
android:ems="20"
android:hint="@string/search"
android:lineSpacingExtra="5dp"
android:textSize="12sp" >
</com.amplio.MyCustomEditText>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#eeeeee" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawSelectorOnTop="false" />
</RelativeLayout>
</LinearLayout>
这是我的addtooutlet\u list\u item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="46dp"
android:background="#ffffff"
android:padding="5dip"
android:weightSum="100" >
<TextView
android:id="@+id/item_bname"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="20"
android:padding="2dp"
android:text="Hello"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#000000"
android:textSize="12dip" />
<TextView
android:id="@+id/item_bid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="20"
android:padding="2dp"
android:text="Hello"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#000000"
android:textSize="12dip"
android:visibility="invisible" />
<TextView
android:id="@+id/item_cid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="20"
android:padding="2dp"
android:text="Hello"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#000000"
android:textSize="12dip"
android:visibility="invisible" />
<Button
android:id="@+id/item_button"
android:layout_width="31dp"
android:layout_height="31dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/item_bname"
android:background="@drawable/circle"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="join"
android:textColor="#ffffff"
android:textSize="10sp" />
</RelativeLayout>
试着这样做。希望它能帮助你
editsearch.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
editsearch.requestFocus();
final ArrayList<Item> itemArray = new ArrayList<Item>();
int textlength = 0;
textlength = editsearch.getText().length();
itemArray.clear();
for (int i = 0; i < item.size(); i++)
{
String itemTitle = item.get(i).name();
String compareItemTitle = "";
if (textlength <= item.length())
{
compareItemTitle = (String) itemTitle.toLowerCase().subSequence(0, textlength);
if(compareItemTitle.contentEquals(editsearch.getText().toString().toLowerCase()))
{
itemArray.add(item.get(i));
}
}
}
adapter = new MyAdapter(AddToOutlet.this, R.layout.addtooutlet_list_item, itemArray);
lv.setAdapter(adapter);
}
}
});
editsearch.addTextChangedListener(新的TextWatcher(){
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
}
@凌驾
更改前的公共无效(字符序列arg0,int arg1,
整数arg2,整数arg3){
//TODO自动生成的方法存根
}
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
editsearch.requestFocus();
final ArrayList itemArray=新ArrayList();
int textlength=0;
textlength=editsearch.getText().length();
itemArray.clear();
对于(int i=0;i 如果(textlength尝试这种方式,这正是您想要的
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// adds item to action bar
getMenuInflater().inflate(R.menu.search_main, menu);
// Get Search item from action bar and Get Search service
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);
if (searchItem != null) {
searchView = (SearchView) searchItem.getActionView();
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
searchView.setIconified(false);
}
return true;
}
我想这对你有帮助
editsearch.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
editsearch.requestFocus();
final ArrayList<Item> itemArray = new ArrayList<Item>();
int textlength = 0;
textlength = editsearch.getText().length();
itemArray.clear();
for (int i = 0; i < item.size(); i++)
{
String itemTitle = item.get(i).name();
String compareItemTitle = "";
if (textlength <= item.length())
{
compareItemTitle = (String) itemTitle.toLowerCase().subSequence(0, textlength);
if(compareItemTitle.contentEquals(editsearch.getText().toString().toLowerCase()))
{
itemArray.add(item.get(i));
}
}
}
adapter = new MyAdapter(AddToOutlet.this, R.layout.addtooutlet_list_item, itemArray);
lv.setAdapter(adapter);
}
}
});
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// adds item to action bar
getMenuInflater().inflate(R.menu.search_main, menu);
// Get Search item from action bar and Get Search service
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);
if (searchItem != null) {
searchView = (SearchView) searchItem.getActionView();
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
searchView.setIconified(false);
}
return true;
}