Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为ListAdapter实现方法getFilter_Java_Android - Fatal编程技术网

Java 如何为ListAdapter实现方法getFilter

Java 如何为ListAdapter实现方法getFilter,java,android,Java,Android,我想在一个名为medical-u的移动应用程序中实现一个搜索功能,这是一个医学应用程序,具有搜索医院和全科医生(印度尼西亚语为puskesmas)的搜索功能。我想在ListView上使用EditText添加搜索功能。 在internet上的教程和文档中,使用的适配器是ArrayAdapter,而在我的项目中,我使用ListAdapter,搜索列表从雅加达URL API检索数据。 文档中的getFilter仅适用于所有教程和免费文档中的ArrayAdapter,而我在这里使用的是ListAdapt

我想在一个名为medical-u的移动应用程序中实现一个搜索功能,这是一个医学应用程序,具有搜索医院和全科医生(印度尼西亚语为puskesmas)的搜索功能。我想在ListView上使用EditText添加搜索功能。 在internet上的教程和文档中,使用的适配器是
ArrayAdapter
,而在我的项目中,我使用
ListAdapter
,搜索列表从雅加达URL API检索数据。 文档中的
getFilter
仅适用于所有教程和免费文档中的
ArrayAdapter
,而我在这里使用的是
ListAdapter
的getFilter方法

public class RumahSakitMain extends AppCompatActivity {

    ProgressBar pbMain;
    ArrayList<HashMap<String, String>> listrs;
    //ori "http://api.jakarta.go.id/v1/rumahsakitumum/"
    //cadangan "https://api.jakarta.go.id/v1/rumahsakitumum/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30?format=geojson"
    String url = "http://api.jakarta.go.id/v1/rumahsakitumum/";
    SearchView svs;

    // Edit Search Text
    private EditText searchText;

    ListAdapter ladapter ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rumah_sakit_main);

        // date
        TextView tanggal = (TextView) findViewById(R.id.tanggal);
        SimpleDateFormat formattgl = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss z");
        String currentDateandTime = formattgl.format(new Date());
        tanggal.setText("Penarikan Data Terakhir :\n"+currentDateandTime);

        // hospital search text
        searchText = (EditText)findViewById(R.id.edtSearch);

        // hospital list
        listrs = new ArrayList<>();
        final ListView lv = (ListView) findViewById(R.id.listViewDaftar);
        pbMain = (ProgressBar) findViewById(R.id.loadingBar);
        pbMain.setVisibility(View.VISIBLE);

        final AlertDialog.Builder dialog = new AlertDialog.Builder(RumahSakitMain.this);
        dialog.setCancelable(false);

        // refresh button
        Button btnRefreshRS = (Button)findViewById(R.id.btnRefreshRS);

        btnRefreshRS.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent refresh = new Intent(getApplicationContext(), tungguRS.class);
                startActivity(refresh);
                RumahSakitMain.this.finish();
            }
        });

        View footerView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false);
        lv.addFooterView(footerView, null, false);

        //Volley, untuk penarikan data dari API, week 11
        RequestQueue q = Volley.newRequestQueue(RumahSakitMain.this);
        StringRequest sr = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {
                // get JSON data, week 11
                try {
                   // String judul = "Rumah Sakit";
                    JSONObject obj = new JSONObject(response);
                    JSONArray data = obj.getJSONArray("data");
                    for (int i = 0 ; i < data.length(); i++) {
                        JSONObject a = data.getJSONObject(i);
                        String judul = a.getString("jenis_rsu");
                        String namars = a.getString("nama_rsu");
                        String id = a.getString("id");
                        String kode_pos = a.getString("kode_pos");
                        String email = a.getString("email");
                        String website = a.getString("website");


                        JSONObject b = a.getJSONObject("location");
                        String alamatrs = b.getString("alamat");

                        JSONArray c = a.getJSONArray("telepon");
                        String telepon = (String) c.get(0);

                        // Week 11
                        HashMap<String, String> map = new HashMap<>();
                        map.put("id", id);
                        map.put("namaRS", namars);
                        map.put("jenis", judul);
                        map.put("alamatRS", alamatrs);
                        map.put("kodepos", kode_pos);
                        map.put("email", email);
                        map.put("website", website);
                        map.put("telepon", telepon);
                        map.put("id", id);
                        listrs.add(map);
                    }
                    pbMain.setVisibility(View.INVISIBLE);

                    ladapter = new SimpleAdapter(RumahSakitMain.this, listrs, R.layout.layoutdaftar, new String[]{"jenis", "namaRS", "alamatRS", "telepon"}, new int[]{R.id.judulnya, R.id.txtNama, R.id.txtAlamat, R.id.txtTelepon});
                    lv.setAdapter(ladapter);

                    Toast.makeText(RumahSakitMain.this, "Penarikan Data Berhasil!", Toast.LENGTH_LONG).show();

                } catch (Exception e) {
                    Log.e("Traffic API padat ", e.toString());
                    pbMain.setVisibility(View.INVISIBLE);

                    RumahSakitMain.this.finish();
                    Intent traffic = new Intent(getApplicationContext(), trafficRS.class);
                    startActivity(traffic);
/*
                    dialog.setTitle("Kendala Teknis!");
                    dialog.setMessage("Penarikan data dari server pusat gagal!");
                    dialog.setPositiveButton("Refresh", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //finish();
                            //System.exit(0);
                            Intent refresh = new Intent(getApplicationContext(), RumahSakitMain.class);
                            startActivity(refresh);
                        }
                    });
                    dialog.setNegativeButton("Kembali ke Menu Utama", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Intent utama = new Intent(getApplicationContext(), MainActivity.class);
                            startActivity(utama);
                        }
                    });

                    dialog.show();
                    */

                }

            }


        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("Internet tidak aktif", error.toString());

                RumahSakitMain.this.finish();

                Intent internet = new Intent(getApplicationContext(), internetRS.class);
                startActivity(internet);

                /*
                dialog.setTitle("Gagal Terhubung!");
                dialog.setMessage("Cek Koneksi Internet Anda!");
                dialog.setPositiveButton("Refresh", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //finish();
                        //System.exit(0);
                        Intent refresh = new Intent(getApplicationContext(), RumahSakitMain.class);
                        startActivity(refresh);
                    }
                });
                dialog.setNegativeButton("Kembali ke Menu Utama", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Intent utama = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(utama);
                    }
                });

                dialog.show();
                */

            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("Content-Type", "application/geojson");
                params.put("Authorization", "Jii+apzvYMt2DWzwEYUvLM4ClHAH1JbE5ro/9eQYpOyvVoaykaOGzwHrU2s/Xyr8\n");
                return params;
            }
        };
        q.add(sr);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String nama = listrs.get(position).get("namaRS");
                String alamat = listrs.get(position).get("alamatRS");
                String telp = listrs.get(position).get("telepon");
                String web = listrs.get(position).get("website");
                String email = listrs.get(position).get("email");
                String judul = listrs.get(position).get("jenis");

                //detail fraga = new detail();
                //Bundle args = new Bundle();
                //args.putString("nama",nama);
                //args.putString("alamat",alamat);
                //args.putString("telp",telp);
                //args.putString("web",web);
                //args.putString("email",email);
                //fraga.setArguments(args);

                Intent keDetail = new Intent(RumahSakitMain.this, RumahSakitDetail.class);
                keDetail.putExtra("jenis", judul);
                keDetail.putExtra("nama", nama);
                keDetail.putExtra("alamat", alamat);
                keDetail.putExtra("telp", telp);
                keDetail.putExtra("web", web);
                keDetail.putExtra("email", email);
                startActivity(keDetail);

                //    FragmentManager fm = getSupportFragmentManager();
                //   FragmentTransaction ft = fm.beginTransaction();

                // ft.replace(R.id.frame,fraga);
                //ft.addToBackStack(null);
                //ft.commit();

                //Intent intent = new Intent(RumahSakitMain.this, RumahSakitDetail.class);
                //intent.putExtra("data", json.toString());
                //startActivity(intent);

            }
        });

您需要使用自定义适配器。创建一个扩展ListAdapter的适配器并自己实现getFilter()。那么,如何为列表适配器创建自定义适配器?如果您只需要此适配器来过滤在
列表视图中显示的内容,您可以使用
ArrayAdapter
的源代码作为指南:。最后是
ArrayFilter
类和
getFilter()
方法。如果这只是在您的代码中使用,那么这两件事情就是您真正需要的,但是如果您将
适配器
与某些框架API一起使用,那么您可能也必须
实现可过滤的
,这就是
getFilter()
方法。
        searchText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                // the error is on getFilter(), because it's red colored
                // it show "cannot resolve method getFilter"
                RumahSakitMain.this.ladapter.getFilter().filter(charSequence);
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
    }

    @Override
    public void onBackPressed() {
        final AlertDialog.Builder dialog = new AlertDialog.Builder(RumahSakitMain.this);
        dialog.setTitle("Menu ");
        dialog.setMessage("Apa yang ingin Anda lakukan?");
        dialog.setPositiveButton("Refresh", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //finish();
                //System.exit(0);
                Intent refresh = new Intent(getApplicationContext(), tungguRS.class);
                startActivity(refresh);
                Toast.makeText(RumahSakitMain.this, "Refresh", Toast.LENGTH_LONG).show();
                RumahSakitMain.this.finish();
            }
        });
        dialog.setNegativeButton("Kembali ke Menu Utama", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent utama = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(utama);
                RumahSakitMain.this.finish();
            }
        });

        dialog.setNeutralButton("Batal", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(RumahSakitMain.this, "Batal", Toast.LENGTH_LONG).show();
            }
        }).show();
    }
}