如何在自定义适配器上实现 Getfilter()

时间:2021-01-25 12:17:15

标签: android mysql listview android-recyclerview

我希望 recyclerview 显示我的数据库中包含的数据。如果 getfilter() 是在我的适配器文件中创建的,我对在 getfilter() 中声明的内容感到困惑。如果有其他建议如何解决这个问题,我将不胜感激。

MainActivity.java

public class MainActivity extends AppCompatActivity {

    RecyclerView recView;
    TextView textView;
    ArrayList<HashMap<String, String>> arrayList;
    Dialog dialog;

    public static final String url = "http://xxx/cobalistuser/menu.php";

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

        textView = findViewById(R.id.textView);

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog = new Dialog(MainActivity.this);

                dialog.setContentView(R.layout.dialog_searchable_spinner);

                dialog.getWindow().setLayout(850, 1000);

                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

                dialog.show();

                EditText editText = dialog.findViewById(R.id.editText);

                var();

                RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);

                arrayList = new ArrayList<>();

                StringRequest stringRequest = new StringRequest(Request.Method.GET, url, response -> {
                    Log.d("response ", response);
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        JSONArray jsonArray = jsonObject.getJSONArray("users");
                        for (int a = 0; a < jsonArray.length(); a++) {
                            JSONObject json = jsonArray.getJSONObject(a);

                            HashMap<String, String> map = new HashMap<>();
                            map.put("id_users", json.getString("id_users"));
                            map.put("username", json.getString("username"));
                            map.put("user_type", json.getString("user_type"));
                            arrayList.add(map);

                            AdapterList adapter = new AdapterList(MainActivity.this, arrayList);
                            recView.setAdapter(adapter);

                            editText.addTextChangedListener(new TextWatcher() {
                                @Override
                                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                                }

                                @Override
                                public void onTextChanged(CharSequence s, int start, int before, int count) {
                                    adapter.getFilter().filter(s);
                                }

                                @Override
                                public void afterTextChanged(Editable s) {

                                }
                            });
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }, error -> Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show());

                requestQueue.add(stringRequest);



            }
        });
    }

    private void var() {


        RecyclerView recView = dialog.findViewById(R.id.recView);
        LinearLayoutManager llm = new LinearLayoutManager(this);
        llm.setOrientation(LinearLayoutManager.VERTICAL);
        recView.setLayoutManager(llm);
    }


}

AdapterList.java

public class AdapterList extends RecyclerView.Adapter<AdapterList.ViewHolder> {

    Context context;
    ArrayList<HashMap<String, String>> arrayList;

    public AdapterList(MainActivity mainActivity, ArrayList<HashMap<String, String>> arrayList) {
        this.context = mainActivity;
        this.arrayList = arrayList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, null);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        // Get position of ViewHolder class
        holder.user_type.setText(arrayList.get(position).get("user_type"));
        holder.username.setText(arrayList.get(position).get("username"));
    }

    @Override
    public int getItemCount() {
        return arrayList.size();
    }


    // This ViewHolder of RecycleView
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // deklarasi variabel yang ada di row.xml
        TextView username, user_type;

        public ViewHolder(View itemView) {
            super(itemView);

            username = itemView.findViewById(R.id.username);
            user_type = itemView.findViewById(R.id.user_type);
        }
    }
}

实际上我很难实现可搜索的微调器 (toptoche),所以我切换到了 editText,其中包含基于互联网教程的列表视图。但我遇到了困难

0 个答案:

没有答案