[英]how to populate a listview with only a part of an arraylist
我不知道這是否可能,但我想問,我如何只使用一部分arraylist填充listview。 我的arraylist的內容來自mySQL數據庫(我使用volley)。 它是具有類別和item_name的項目的列表。 我想做的是每當按下按鈕(類別名稱)時,與該類別關聯的item_names將顯示在arrayList中。 對不起,我的英語不好。
這是我的代碼:這將顯示listView中的所有項目。
import ...
public class Menu extends AppCompatActivity implements Response.Listener<String> {
final String TAG = this.getClass().getSimpleName();
public ListView itemList;
public ArrayList<myItem> itemList;
public myItemAdapter adapter;
Button Fruit, Meat, Dairy;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
String category = "http://10.0.2.2/myPHP/item.php";
StringRequest stringRequestCategory = new StringRequest(Request.Method.GET, category, this, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Error retrieving data", Toast.LENGTH_SHORT).show();
}
});
MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequestCategory);
Fruit = (Button)findViewById(R.id.Fruit);
Fruit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//display the items with the category FRUIT
}
});
}
@Override
public void onResponse(String response) {
Log.d(TAG, response);
itemList = new JsonConverter<myItem>().toArrayList(response, myItem.class);
adapter = new myCategoryAdapter(getApplicationContext(), itemList);
itemList.setAdapter(adapter);
}
}
PHP代碼:
<?php
include_once ("init.php");
$query = "SELECT * FROM tbl_item ORDER BY itemID ASC";
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_assoc($result)){
$data[] = $row;
}
echo json_encode($data);
?>
您必須先過濾列表,然后再將其發送到適配器。
假設您只想顯示類別水果。
Fruit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ArrayList<myItem> filteredItems = new ArrayList<myItem>();
for (myItem item : itemList) {
// Not sure how your myItem class looks like but check category here.
if ("fruit".equals(item.getCategory())) {
filteredItems.add(item);
}
}
adapter.updateContent(filteredItems);
}
});
將此方法添加到適配器類中,以便更新ListView中顯示的項目。
public void updateContent(List<myItem> items) {
currentItems.clear();
currentItems.addAll(items);
notifyDataSetChanged();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.