我用谷歌搜索了其他解决方案,但找不到任何与我的情况相似的解决方案,起初我尝试获取 TextView 和过滤器的内容,但没有成功,请帮助。所以在这里我创建了一个 ListView ,它由三个 TextView 组成,每个 TextView 是一个列,并且数据是从服务器动态添加的。如何根据用户搜索过滤内容。 这是下面的代码。
MainActivity.java
public class MainActivity extends AppCompatActivity {
private void showJSON2(String response){
String id="";
String name="";
String date_from="";
String date_to="";
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray result = jsonObject.getJSONArray(JSON_ARRAY2);
ListView listView = (ListView) findViewById(R.id.list_view);
list = new ArrayList<HashMap<String, String>>();
for (int i=0; i<result.length(); i++) {
JSONObject notice = result.getJSONObject(i);
id = notice.getString(KEY_ID);
name = notice.getString(KEY_NAME);
date_from = notice.getString(KEY_DATE_FROM);
date_to = notice.getString(KEY_DATE_TO);
HashMap<String, String> temp= new HashMap<String, String>();
temp.put(FIRST_COLUMN, id);
temp.put(SECOND_COLUMN, name);
temp.put(THIRD_COLUMN, date_from);
temp.put(FOURTH_COLUMN, date_to);
list.add(temp);
}
ListViewAdapters adapter = new ListViewAdapters(this, list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id)
{
int pos=position+1;
Toast.makeText(MainActivity.this, Integer.toString(pos)+" Clicked", Toast.LENGTH_SHORT).show();
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}
ListViewAdapters.java -
public class ListViewAdapters extends BaseAdapter{
public ListViewAdapters(Activity activity,ArrayList<HashMap<String, String>> list){
super();
this.activity=activity;
this.list=list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater=activity.getLayoutInflater();
if(convertView == null){
convertView=inflater.inflate(R.layout.colmn_row, null);
txtFirst=(TextView) convertView.findViewById(R.id.name);
txtSecond=(TextView) convertView.findViewById(R.id.gender);
txtThird=(TextView) convertView.findViewById(R.id.age);
txtFourth=(TextView) convertView.findViewById(R.id.status);
}
HashMap<String, String> map=list.get(position);
txtFirst.setText(map.get(FIRST_COLUMN));
txtSecond.setText(map.get(SECOND_COLUMN));
txtThird.setText(map.get(THIRD_COLUMN));
txtFourth.setText(map.get(FOURTH_COLUMN));
return convertView;
}
}
最佳答案
在MainActivity.java中,
public class MainActivity extends AppCompatActivity {
ArrayList<HashMap<String, String>> list = new ArrayList<>();
ListViewAdapters adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_default);
adapter = new ListViewAdapters(this, list);
listView.setAdapter(adapter);
}
private void showJSON2(String response) {
...
list.clear();
...
list.add(temp);
...
// ListViewAdapters adapter = new ListViewAdapters(this, list);
// listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
...
}
}
在适配器类中,
public class ListViewAdapters extends BaseAdapter {
ArrayList<HashMap<String, String>> origList = new ArrayList<>();
public ListViewAdapters(Activity activity,ArrayList<HashMap<String, String>> list) {
super();
this.activity=activity;
this.list=list;
this.origList=list;
}
...
void filter(String filterString) {
list = new ArrayList<>();
for (HashMap<String, String> item: origList) {
// use your own logic to filter
if (itemShouldBeAdded)
list.add(item); // add if item is inside filter
}
notifyDataSetChanged();
}
void cancelFilter() {
list = origList;
notifyDataSetChanged();
}
}
现在,要进行过滤,请调用函数filter。
adapter.filter("some_string");
要取消过滤器,
adapter.cancelFilter();
关于java - 如何过滤ListView中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46390373/