簡體   English   中英

如何僅使用arraylist的一部分填充listview

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM