java - 从微调器中选择项目,对 ListView 中的 JSON 结果进行过滤/排序

标签 java android json spinner

我有一个来自 json 的 ListView ,如下所示:

{
"GetPOIByTypeResult": [
    {
        "ID": 1,
        "Name": "Spitalul Judetean",
        "Phone": "085228291",
        "Rating": 44,
        "Schedule": {
            "ClosingHour": 16,
            "ID": 1,
            "IsNonStop": false,
            "IsOpenOnFriday": true,
            "IsOpenOnMonday": true,
            "IsOpenOnSaturday": false,
            "IsOpenOnSunday": false,
            "IsOpenOnThursday": true,
            "IsOpenOnTuesday": true,
            "IsOpenOnWednesday": true,
            "Name": "Monday to Friday",
            "OpenHour": 8
        },
        "Specialities": [
            {
                "ID": 1,
                "Name": "Stomatologie"
            },
            {
                "ID": 2,
                "Name": "Radiologie"
            },
            {
                "ID": 3,
                "Name": "Cardiologie"
            },
            {
                "ID": 4,
                "Name": "Ginecologie"
            },
            {
                "ID": 5,
                "Name": "Pediatrie"
            },
            {
                "ID": 6,
                "Name": "Patologie"
            },
            {
                "ID": 7,
                "Name": "Oncologie"
            },
            {
                "ID": 8,
                "Name": "Macelarie"
            },
            {
                "ID": 9,
                "Name": "Oftalmologie"
            },
            {
                "ID": 10,
                "Name": "Ghipsologie"
            }
        ],
        "Type": "Hospital"
    },

]
}

在我的 ListView 中,有来自“名称”字段的结果。 我想按专业过滤列表,该专业不显示在列表中,仅返回值。 我实际上不知道如何进行这项工作,这就是我到目前为止所做的:

package com.example.medical.map;

import java.util.ArrayList;

public class SearchActivityHospitals extends ListActivity {

Button searchButton;
Button closeButton;
public Spinner spinner1;
private String poiType[];
private boolean isSearch = false;
EditText editText, editText2;
JsonArrayAdapterHospitals adapter;
ArrayList<Hospitals> tempName = new ArrayList<Hospitals>();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search_activity_layout_actionbar_hospitals);
    adapter = new JsonArrayAdapterHospitals(this, tempName);
    setListAdapter(adapter);

    poiType = new String[] {"", "Stomatologie", "Radiologie", "Cardiologie", "Ginecologie", "Pediatrie", "Patologie", "Oncologie", "Macelarie", "Oftalmologie", "Ghipsologie"};
    //this is my spinner
    ArrayAdapter<String> adapter0 = new ArrayAdapter<String>(SearchActivityHospitals.this, android.R.layout.simple_spinner_item, poiType);
    adapter0.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    spinner1.findViewById(R.id.spinnerSpecialityHospitals);
    spinner1.setAdapter(adapter0);
    spinner1.setOnItemSelectedListener(new MyOnItemSelectedListener()
    );

    WebService.setOnFinishAllHospitals(new OnFinishAllHospitals() {

        public void onFinishAllHospitals(ArrayList<Hospitals> hospitals) {

            if (hospitals != null) {
                if (hospitals.size() > 0) {
                    tempName.clear();
                    tempName.addAll(hospitals);
                    adapter.notifyDataSetChanged();
                }

            }

        }

    });

    WebService
            .GetPOIByType("http://82.77.55.81:9090/MedicalMap/MedicalMap.svc/Getpoibytype/hospital");

    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);
    lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            Intent intent = new Intent(SearchActivityHospitals.this, DetailsHospitals.class);
            intent.putExtra("Value", tempName.get(position));
            startActivity(intent);

        }
    });

    editText = (EditText) findViewById(R.id.editNameTextHospitals);
    editText.addTextChangedListener(new TextWatcher() {

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }

        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            adapter.getFilter().filter(s); // Filter from my adapter
            adapter.notifyDataSetChanged(); // Update my view
        }

        public void afterTextChanged(Editable s) {

        }

    });

    editText2 = (EditText) findViewById(R.id.editAddressTextHospitals);
    editText2.addTextChangedListener(new TextWatcher() {

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }

        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            adapter.getFilter().filter(s); // Filter from my adapter
            adapter.notifyDataSetChanged(); // Update my view
        }

        public void afterTextChanged(Editable s) {

        }

    });



}
//and here is my onitem click listener which I have no idea how to do, please help
public class MyOnItemSelectedListener implements OnItemSelectedListener{

    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        if(spinner1.getSelectedItem().equals("Stomatologie")){

        }else{

        }
        if(spinner1.getSelectedItem().equals("Radiologie")){

        }else{

        }
        if(spinner1.getSelectedItem().equals("Cardiologie")){

        }else{

        }
        if(spinner1.getSelectedItem().equals("Ginecologie")){

        }else{

        }
        if(spinner1.getSelectedItem().equals("Pediatrie")){

        }else{

        }
        if(spinner1.getSelectedItem().equals("Patologie")){

        }else{

        }
        if(spinner1.getSelectedItem().equals("Oncologie")){

        }else{

        }
        if(spinner1.getSelectedItem().equals("Macelarie")){

        }else{

        }
        if(spinner1.getSelectedItem().equals("Oftalmologie")){

        }else{

        }
        if(spinner1.getSelectedItem().equals("Ghipsologie")){

        }else{

        }

    }


    public void onNothingSelected(AdapterView<?> arg0) {
        spinner1.getSelectedItem().equals("");
        {

        }
    }



public void handleClick_search(View v) {

    ImageView searchButton = (ImageView) findViewById(R.id.searchButton);
    searchButton.setVisibility(View.INVISIBLE);
    LinearLayout layout = (LinearLayout) findViewById(R.id.searchFieldLayout);
    layout.setVisibility(View.VISIBLE);

}

public void handleClick_closeSearch(View v) {

    ImageView searchButton = (ImageView) findViewById(R.id.searchButton);
    searchButton.setVisibility(View.VISIBLE);
    LinearLayout layout = (LinearLayout) findViewById(R.id.searchFieldLayout);
    layout.setVisibility(View.GONE);

}

public void showSearch() {

    if (isSearch != true) {
        isSearch = true;
        searchButton.setVisibility(View.INVISIBLE);
        closeButton.setVisibility(View.VISIBLE);
        findViewById(R.layout.search_activity_layout_doctors).setVisibility(View.VISIBLE);

    }

}

public void hideSearch() {
    if (isSearch != false) {
        isSearch = false;
        searchButton.setVisibility(View.VISIBLE);
        closeButton.setVisibility(View.GONE);
        findViewById(R.layout.search_activity_layout_doctors).setVisibility(View.GONE);

    }

}


}
}

所以我的问题是,如何进行以下操作: 从微调器中选择项目 -> 按所选条件过滤/排序列表 标准已解析但未显示在列表中,因此数据在那里,但该怎么做?

最佳答案

我想你能做的是:

  1. 在微调器中选择某个项目时,调用某个函数 reorganizeList(String criteria)
  2. 在reorganizeList(criteria)中:假设你的数据集是一个List,mListData。对数据使用 Collections.sort() 并使用条件对数据进行排序。
  3. 在适配器上调用notifyDataSetChanged()。

关于java - 从微调器中选择项目,对 ListView 中的 JSON 结果进行过滤/排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11648485/

相关文章:

java - 如何打印每个数组元素?

java - isInitialized - lateinit var 的支持字段此时不可访问

jquery - 跟踪用户输入的页面

python - 尝试在Maya 2018 Python环境中导入cjson

android - Android 11 中的 PDF 查看器权限问题

javascript - 如何使用 $in 查询 mongodb 中 id 存储在 `var ids` 数组中的文档?

java - 我的 Android App Java 中的动态透明背景

java - 使用本地 dtd 进行 xml 验证使用 java 传递本地 xml 和 dtd 文件

android - 无法更新房间数据库中的对象

java - 震动监听器检测到过多的震动