Android 如何使用TextView搜索在recyclerview中加载更多内容?

Android 如何使用TextView搜索在recyclerview中加载更多内容?,android,android-recyclerview,Android,Android Recyclerview,我使用API中的数据创建了一个recyclerview,该API使用TextView过滤列表并搜索我的项目。一切都很完美。我的问题是我的Recyclerview太大,所以我将它设置为只运行前10项,然后在TextChange上加载更多。我基本上复制了我的方法,命名为loadmoredata(),它运行的代码与刚才设置为array.length的代码完全相同。它起到了作用,但我的问题是,在每一个文本或退格上,我假设的方法一直在运行,并且项目不断增加,所以我开始对同一个项目添加两个,然后是三个,然后

我使用API中的数据创建了一个
recyclerview
,该API使用
TextView
过滤列表并搜索我的项目。一切都很完美。我的问题是我的
Recyclerview
太大,所以我将它设置为只运行前10项,然后在
TextChange
上加载更多。我基本上复制了我的方法,命名为
loadmoredata()
,它运行的代码与刚才设置为
array.length的代码完全相同。它起到了作用,但我的问题是,在每一个文本或退格上,我假设的方法一直在运行,并且项目不断增加,所以我开始对同一个项目添加两个,然后是三个,然后是四个

我怎样才能解决这个问题?有没有更简单的方法来保持我的单一方法,并在文本更改时扩展该方法?我试图在我的
适配器中更改
getcount()
以返回50,但一旦使用
searchtext
我的应用程序崩溃,我不知道如何在文本更改时将
getcount()
从50更改为
listitems.length()
。我的代码发布在下面:

Recyclerview代码

recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getContext());
loadRecycleServiceWdata();
SearchText.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void PostTextChanged(可编辑){
过滤器(可编辑的.toString());
loadmoredata();
}
});
返回v;
}
专用无效过滤器(字符串文本){
List filteredList=新建ArrayList();
对于(ListItem项目:listItems){
if(item.getHead().toLowerCase().contains(text.toLowerCase())| | item.getDesc().toLowerCase().contains(text.toLowerCase()){
filteredList.add(项目);
}
}
adapter=newmyadapter(filteredList,getContext());
recyclerView.setAdapter(适配器);
}
私有void loadRecyclerViewData(){
final ProgressDialog ProgressDialog=新建ProgressDialog(getContext());
progressDialog.setMessage(“正在加载数据…”);
progressDialog.show();
StringRequest StringRequest=新StringRequest(Request.Method.GET,
URL\u数据,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
progressDialog.disclose();
试一试{
JSONArray数组=新的JSONArray(响应);

对于(int i=0;i假设
loadmoredata()
loadRecycleServiceWdata()
相同,您总是将相同的
10
放在列表的第一个iten上,因为这行代码:
for(int i=0;i使用google的支持库
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    loadRecyclerViewData();

    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) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
            filter(editable.toString());
            loadmoredata();
        }
    });

    return v;
}



private void filter(String text) {
    List<ListItem> filteredList = new ArrayList<>();

    for (ListItem item : listItems) {
        if (item.getHead().toLowerCase().contains(text.toLowerCase()) || item.getDesc().toLowerCase().contains(text.toLowerCase())) {
            filteredList.add(item);
        }
    }
    adapter = new MyAdapter(filteredList, getContext());
    recyclerView.setAdapter(adapter);
}


private void loadRecyclerViewData() {
    final ProgressDialog progressDialog = new ProgressDialog(getContext());
    progressDialog.setMessage("Loading Data...");
    progressDialog.show();

    StringRequest stringRequest = new StringRequest(Request.Method.GET,
            URL_DATA,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    progressDialog.dismiss();
                    try {
                        JSONArray array = new JSONArray(response);


                        for(int i=0; i<10; i++){
                            JSONObject o = array.getJSONObject(i);

                            ListItem item = new ListItem(
                                    o.getString("name"),

                            );

                            listItems.add(item);
                        }
                        adapter = new MyAdapter(listItems, getContext());
                        recyclerView.setAdapter(adapter);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    progressDialog.dismiss();
                    Toast.makeText(getContext(),error.getMessage(),Toast.LENGTH_LONG).show();

                }
            });

    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.add(stringRequest);
}
int last = 0;

private void loadmoredata() {
    final ProgressDialog progressDialog = new ProgressDialog(getContext());
    progressDialog.setMessage("Loading Data...");
    progressDialog.show();

    StringRequest stringRequest = new StringRequest(Request.Method.GET,
            URL_DATA,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    progressDialog.dismiss();
                    try {
                        JSONArray array = new JSONArray(response);

                        for(int i=last; i<last + 10; i++){
                            JSONObject o = array.getJSONObject(i);

                            ListItem item = new ListItem(
                                    o.getString("name"),
                            );

                            listItems.add(item);
                        }
                        adapter.notifyDataSetChanged();
                        last += 10;
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    progressDialog.dismiss();
                    Toast.makeText(getContext(),error.getMessage(),Toast.LENGTH_LONG).show();
                }
            });

    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.add(stringRequest);
}