我如何使用Listview中的textview过滤数据,数据来自PHP使用JSON Parser。我已经从网上搜索了但是我没有得到他们的观点,因为他们正在使用字符串数组而我使用来自php的解析数据。感谢那些愿意帮助的人。
这是代码
productlist.java
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class productlist extends ListActivity {
// Progress Dialog
private ProgressDialog pDialog;
private EditText et;
int textlength = 0;
private static final String URl = "http://192.168.254.101/productlist.php";
private static final String TAG_POSTS = "message";
private static final String TAG_BRAND = "Brand";
private static final String TAG_CATEGORY = "Category";
private static final String TAG_DESCRIPTION = "Description";
private static final String TAG_CODE = "Code";
private static final String TAG_QUANTITY = "Quantity";
private static final String TAG_UNIT = "Unit";
private static final String TAG_UNITPRICE = "Unitprice";
private JSONArray mComments = null;
//manages all of our comments in a list.
private ArrayList<HashMap<String, String>> mCommentList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.productlist);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//loading the comments via AsyncTask
new LoadComments().execute();
}
public void updateJSONdata() {
mCommentList = new ArrayList<HashMap<String, String>>();
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(URl);
try {
mComments = json.getJSONArray(TAG_POSTS);
for (int i = 0; i < mComments.length(); i++) {
JSONObject c = mComments.getJSONObject(i);
//gets the content of each tag
String brand = c.getString(TAG_BRAND);
String category = c.getString(TAG_CATEGORY);
String description = c.getString(TAG_DESCRIPTION);
String code = c.getString(TAG_CODE);
String quantity = c.getString(TAG_QUANTITY);
String unit = c.getString(TAG_UNIT);
String unitprice = c.getString(TAG_UNITPRICE);
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_BRAND, brand);
map.put(TAG_CATEGORY, category);
map.put(TAG_DESCRIPTION, description);
map.put(TAG_CODE, code);
map.put(TAG_QUANTITY, quantity);
map.put(TAG_UNIT, unit);
map.put(TAG_UNITPRICE, unitprice);
mCommentList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
private void updateList() {
ListAdapter adapter = new SimpleAdapter(this, mCommentList,
R.layout.single_post, new String[] { TAG_BRAND, TAG_CATEGORY,
TAG_DESCRIPTION, TAG_CODE, TAG_QUANTITY, TAG_UNIT, TAG_UNITPRICE}, new int[]{ R.id.Brand, R.id.Category,
R.id.Description, R.id.Code, R.id.Quantity, R.id.Unit, R.id.Price });
setListAdapter(adapter);
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
});
}
public class LoadComments extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(productlist.this);
pDialog.setMessage("Loading Products...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected Boolean doInBackground(Void... arg0) {
updateJSONdata();
return null;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
pDialog.dismiss();
updateList();
}
}
}
productlist.xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff" >
<LinearLayout
android:id="@+id/top_layover"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="vertical" >
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/EditText01"
android:layout_gravity="center_horizontal"
android:hint="Search.." />
</LinearLayout>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bottom_layover"
android:layout_below="@+id/top_layover"
android:background="#fff"
android:divider="@android:color/transparent"
android:scrollbars="none" />
<LinearLayout
android:id="@+id/bottom_layover"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:orientation="horizontal"
android:weightSum="2" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
singlepost.xml
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#f0f0f0"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="5dp"
android:background="#ffffff">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:paddingLeft="5dp"
android:text="Brand: ">
</TextView>
<TextView
android:id="@+id/Brand"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:textColor="#5d5d5d"
android:textStyle="bold" >
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:paddingLeft="5dp"
android:text="Category: " >
</TextView>
<TextView
android:id="@+id/Category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:textColor="#5d5d5d"
android:textStyle="bold" >
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:paddingLeft="5dp"
android:text="Description: " >
</TextView>
<TextView
android:id="@+id/Description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:textColor="#5d5d5d"
android:textStyle="bold" >
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:paddingLeft="5dp"
android:text="Code: " >
</TextView>
<TextView
android:id="@+id/Code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:textColor="#5d5d5d"
android:textStyle="bold" >
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:paddingLeft="5dp"
android:text="Quantity: ">
</TextView>
<TextView
android:id="@+id/Quantity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:textColor="#5d5d5d"
android:textStyle="bold" >
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:paddingLeft="5dp"
android:text="Unit: " >
</TextView>
<TextView
android:id="@+id/Unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:textColor="#5d5d5d"
android:textStyle="bold" >
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:paddingLeft="5dp"
android:text="Price: " >
</TextView>
<TextView
android:id="@+id/Price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:textColor="#5d5d5d"
android:textStyle="bold" >
</TextView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
produclist.php
<?php
try{
$handler= new PDO('mysql:host=localhost;dbname=account','root','');
$handler->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(Exception $e){
echo $e->getMessage();
die();
}
$query =$handler->query( "Select * from tblproducts");
$records= array();
$records =$query->fetchAll(PDO::FETCH_ASSOC);
$json["message"]=$records;
echo json_encode($json);
?>
答案 0 :(得分:0)
请使用以下代码,您将根据需要了解并自定义
class CustomAdpter extends BaseAdapter implements Filterable{
LayoutInflater inflater = null;
Activity activity;
ItemFilter itemfilter = new ItemFilter();
public CustomAdpter(Activity a) {
this.activity = a;
inflater = LayoutInflater.from(a);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return listBillingSearch.size();
//return 3;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return listBillingSearch.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View view1, ViewGroup parent) {
ViewHolder holder;
if (view1 == null) {
view1 = inflater.inflate(R.layout.adpter_billing, null);
holder = new ViewHolder();
holder.txtBillingListCompanyName = (TextView) view1.findViewById(R.id.txtBillingListCompanyName);
holder.txtBillingListInvoice = (TextView) view1.findViewById(R.id.txtBillingListInvoice);
holder.txtBillingListStartDate = (TextView) view1.findViewById(R.id.txtBillingListStartDate);
holder.txtBillingListEndDate = (TextView) view1.findViewById(R.id.txtBillingListEndDate);
holder.txtBillingListVoiceCalls = (TextView) view1.findViewById(R.id.txtBillingListVoiceCalls);
holder.txtBillingListSMS = (TextView) view1.findViewById(R.id.txtBillingListSMS);
holder.txtBillingListDataPlan = (TextView) view1.findViewById(R.id.txtBillingListDataPlan);
view1.setTag(holder);
}else{
holder = (ViewHolder) view1.getTag();
}
holder.txtBillingListCompanyName.setText(listBillingSearch.get(position).getStrCompanyName());
holder.txtBillingListInvoice.setText(listBillingSearch.get(position).getStrInvoice());
holder.txtBillingListStartDate.setText(listBillingSearch.get(position).getStrStartDate());
holder.txtBillingListEndDate.setText(listBillingSearch.get(position).getStrEndDate());
holder.txtBillingListVoiceCalls.setText(listBillingSearch.get(position).getStrVoiceCall());
holder.txtBillingListSMS.setText(listBillingSearch.get(position).getStrSMS());
holder.txtBillingListDataPlan.setText(" "+listBillingSearch.get(position).getStrDataPlan());
return view1;
}
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
return itemfilter;
}
private class ItemFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<Billing> list = listBilling;
int count = list.size();
final ArrayList<String> nlist = new ArrayList<String>(count);
String filterableString ;
ArrayList<Billing> filterdata = new ArrayList<Billing>();
if(constraint.equals(null) || constraint.equals("")){
//filterdata = listBilling;
results.values = listBilling;
results.count = listBilling.size();
}else{
// listBillingSearch.clear();
for (int i = 0; i < count; i++) {
filterableString = list.get(i).getStrCompanyName();
if (filterableString.toLowerCase().startsWith(filterString)) {
filterdata.add(listBilling.get(i));
}
}
results.values = filterdata;
results.count = filterdata.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
//if(results.count > 0)
listBillingSearch = (ArrayList<Billing>) results.values;
notifyDataSetChanged();
}
}
}
public static class ViewHolder {
TextView txtBillingListCompanyName;
TextView txtBillingListInvoice ;
TextView txtBillingListStartDate;
TextView txtBillingListEndDate;
TextView txtBillingListVoiceCalls;
TextView txtBillingListSMS;
TextView txtBillingListDataPlan;
}
我希望它会对你有所帮助。
如果您发现任何问题,请告诉我。