Ich habe ein Problem. Ich möchte meine Listenansicht mit SearchView oder EditText durchsuchen und meine Elemente filtern, wenn jemand etwas Text eingibt. Aber ich finde die richtige Antwort hier nicht, da meine JSON-Datei aus einer PHP/MySQL-Datenbank stammt. Kann mir jemand helfen ?Android Listview Suche Json
Hier ist mein Code
public class MainActivity extends AppCompatActivity implements ListView.OnItemClickListener {
private ListView listView;
private String JSON_STRING;
EditText et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(this);
listView.smoothScrollToPosition(0);
listView.setTextFilterEnabled(true);
et = (EditText) findViewById(R.id.editText2);
getJSON();
}
private void showEmployee() {
JSONObject jsonObject = null;
final ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
try {
jsonObject = new JSONObject(JSON_STRING);
final JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY);
for (int i = 0; i < result.length(); i++) {
JSONObject jo = result.getJSONObject(i);
String id = jo.getString(Config.TAG_ID);
String kfz = jo.getString(Config.TAG_KFZ);
String bland = jo.getString(Config.TAG_BLAND);
String kreis = jo.getString(Config.TAG_KREIS);
HashMap<String, String> employees = new HashMap<>();
employees.put(Config.TAG_ID, id);
employees.put(Config.TAG_KFZ, kfz);
employees.put(Config.TAG_BLAND, bland);
employees.put(Config.TAG_KREIS, kreis);
list.add(employees);
}
} catch (JSONException e) {
e.printStackTrace();
}
final ListAdapter adapter = new SimpleAdapter(
MainActivity.this, list, R.layout.list_item,
new String[]{Config.TAG_KFZ, Config.TAG_KREIS},
new int[]{R.id.kfz, R.id.kreis});
listView.setAdapter(adapter);
}
private void getJSON(){
class GetJSON extends AsyncTask<Void,Void,String> {
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(MainActivity.this,"Suche KFZ Kennzeichen","Warten...",false,false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
JSON_STRING = s;
showEmployee();
}
@Override
protected String doInBackground(Void... params) {
RequestHandler rh = new RequestHandler();
String s = rh.sendGetRequest(Config.URL_GET_ALL);
return s;
}
}
GetJSON gj = new GetJSON();
gj.execute();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(this, KfzDetails.class);
HashMap<String,String> map =(HashMap)parent.getItemAtPosition(position);
String kfzid = map.get(Config.TAG_ID).toString();
intent.putExtra(Config.EMP_ID,kfzid);
startActivity(intent);
}
}
dies Wie 'SimpleAdapter' seinen' Filter' implementiert, wie ich bereits sagte, müssen Sie einen anderen 'Adapter' verwenden, versuchen Sie einen benutzerdefinierten Adapter wie:' class Adapter extends' [MatchableArrayAdapter] (https://gist.github.com/pskink/2dd4d17a93caf02ff696533e82f952b0) ' {...' und überschreibt die Methoden 'onBind' und 'matches' –
pskink