android - 我是新来的 android 这里是我的用于列表视图的 CustomAdaptor,带有搜索选项以显示三列而没有 api 仅与服务器连接
问题描述
我是安卓新手。我正在连接服务器 Mysql 而不使用任何 API。这是我的MachineSearch
代码。在这list3.get(position)
给了我以前的列表,就像没有过滤旧数据一样。
一切都很完美,但是当我搜索时,我得到了以前List3
的数据。在搜索时,我得到了新的过滤器数据,但是当我点击时我变老了。而且我必须传递两个隐藏的数据ID和要显示的名称。
提前致谢
public class MachineSearchList extends AppCompatActivity {
SearchView searchView;
CustomAdaptor adapter;
ArrayList<String> list1;
ArrayList<String> list2;
ArrayList<String> list3;
ListView listView;
String dataItemName;
String dataItemId;
ArrayList<SearchSetterandGetter> arrayList = new ArrayList<SearchSetterandGetter>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
setContentView(R.layout.employeelist_main);
super.onCreate(savedInstanceState);
listView = (ListView) findViewById(R.id.listemp);
searchList();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
dataItemName = list3.get(position);
dataItemId = list2.get(position);
openActivityOne();
}
});
searchView = (SearchView) findViewById(R.id.searchview_lay_act_xml);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.filter(newText);
return false;
}
});
}
public void searchList() {
try {
ArrayList<MachineSetterGetter> machineList = null;
MachineSearch emp = new MachineSearch();
machineList = emp.getmachineSearch();
list1 = new ArrayList<>();
list2 = new ArrayList<>();
list3 = new ArrayList<>();
for (MachineSetterGetter machine : machineList) {
list1.add(machine.getiTemId());
list2.add(machine.getiTemCode());
list3.add(machine.getiTemName());
}
for (int i = 0; i < list1.size(); i++) {
SearchSetterandGetter model = new SearchSetterandGetter(list1.get(i), list2.get(i), list3.get(i));
arrayList.add(model);
}
adapter = new CustomAdaptor(getApplicationContext(), arrayList);
listView.setAdapter(adapter);
listView.setTextFilterEnabled(true);
} catch (Exception exh) {
Log.e("******************", "check" + exh);
}
}
public void openActivityOne() {
Intent resultIntend = new Intent();
resultIntend.putExtra("result", dataItemName);
resultIntend.putExtra("hideId", dataItemId);
setResult(RESULT_OK, resultIntend);
finish();
}
}
我的自定义适配器
public class CustomAdaptor extends BaseAdapter {
Context applicationContext;
LayoutInflater inflater;
ArrayList<String> dataa1;
ArrayList<String> dataa2;
ArrayList<String> dataa3;
ArrayList<String> dataa3Search;
ArrayList<SearchSetterandGetter> modelList;
ArrayList<SearchSetterandGetter> arrayList;
public String getId;
public String getCode;
public String getName;
public CustomAdaptor(Context pplicationContext, ArrayList<SearchSetterandGetter> model) {
applicationContext=pplicationContext;
this.modelList=model;
this.arrayList = new ArrayList<SearchSetterandGetter>();
this.arrayList.addAll(modelList);
inflater = (LayoutInflater.from(applicationContext));
}
@Override
public int getCount() {
return modelList.size();
}
@Override
public Object getItem(int position) {
return modelList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.employeeview_no_name, null);
TextView emp1 = (TextView) convertView.findViewById(R.id.empname1);
TextView emp2 = (TextView) convertView.findViewById(R.id.empname2);
TextView emp3 = (TextView) convertView.findViewById(R.id.empname3);
emp1.setText(modelList.get(position).getSno());
emp2.setText(modelList.get(position).getScode());
emp3.setText(modelList.get(position).getSearchName());
return convertView;
}
public void filter(String charText){
charText = charText.toLowerCase(Locale.getDefault());
modelList.clear();
if (charText.length()==0){
modelList.addAll(arrayList);
}
else {
for ( SearchSetterandGetter model : arrayList){
if (model.getSearchName().toLowerCase(Locale.getDefault()).contains(charText)||model.getSno().toLowerCase(Locale.getDefault()).contains(charText)){
modelList.add(model);
}
}
}
notifyDataSetChanged();
// modelList.clear();
}
}
解决方案
据我了解,您的适配器没有更新,试试这个。尝试调试并检查其是否更新
if(adapter !=null){
adapter = null;
}
adapter = new CustomAdaptor(this, arrayList);
listView.setAdapter(adapter);
listView.setTextFilterEnabled(true);
listView.notifyDataSetChanged();
推荐阅读
- tensorflow - 如何计算 eval_metric_ops 中的中位数?
- ios - 按钮粒子效果 Swift
- gitlab - 在 gitlab 服务器中运行 .gitlab-ci.yml 文件的进程的名称是什么?
- vba - PowerShell 将 Excel 加载项拆分为单独的工作簿
- python - 子进程终止时如何运行函数?
- reactjs - 在阿波罗查询后发送道具
- python - for循环中的熊猫get_dummies
- elixir - Elixir, Absinthe 如何在与苦艾酒约会后创建用户?
- java - NamedParameterJdbcTemplate 不支持 SUM()?
- list - Haskell中整数列表的递归排序算法