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