Android, Wie Sie nur bestimmte Einträge in der Liste anzeigen aus dem gleichen array?
Habe ich nach mehreren tutorials, die haben mich erfolgreich bei der Beschaffung von Informationen aus meiner Datenbank von meiner website zu meiner app, dann kann ich es anzeigen in einer Liste anzeigen, aber was ich tun möchte, ist nicht die komplette Liste, ich möchte ein paar Schaltflächen, mit denen Sie mir zeigen nur die Daten, die bestimmten Kriterien entsprechen, wie unten 1 zeigen nur Elemente in der Liste medio=Periodicos und Taste 2 zeigen Sie Elemente, medio= - Radios hier ist der code, den ich verwende
in meiner Haupttätigkeit
FancyAdapter aa = null;
static ArrayList<String> resultRow;
//after onCreate
//this button I'm usin now but I'm getting the hole list!
Button periodicos = (Button) findViewById(R.id.btnPeriodicos);
periodicos.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
weballamar = "http://www.mysite.com/mydbjsonstring.php";
webcall();
}});
//webcall gets the info from the internet and displays the list
public void webcall(){
ListView myListView = (ListView) findViewById(R.id.mylistView);
aa = new FancyAdapter();
myListView.setOnItemClickListener(onPeriodicosListClick);
myListView.setAdapter(aa);
PeriodicosListLayout.setVisibility(View.VISIBLE);
webLayout.setVisibility(View.GONE);
try {
String result = "";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(weballamar);
//httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream webs = entity.getContent();
//convert response to string
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(webs, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
webs.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
//parse json data
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject json_data = jArray.getJSONObject(i);
webResult resultRow = new webResult();
resultRow._id = json_data.getString("id");
resultRow.Name = json_data.getString("Id_Nombre");
resultRow.Medio = json_data.getString("Medio");
resultRow.Pais = json_data.getString("Pais");
resultRow.Estado = json_data.getString("Estado");
resultRow.Ciudad = json_data.getString("Ciudad");
resultRow.website = json_data.getString("website");
resultRow.Url = json_data.getString("Url");
resultRow.Url2 = json_data.getString("Url2");
resultRow.InfAnex = json_data.getString("InfAnex");
arrayOfWebData.add(resultRow);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
} catch (Exception e) {
//this is the line of code that sends a real error message to the
//log
Log.e("ERROR", "ERROR IN CODE: " + e.toString());
//this is the line that prints out the location in
//the code where the error occurred.
e.printStackTrace();
}
}
class FancyAdapter extends ArrayAdapter<webResult> {
FancyAdapter() {
super(mainActivity.this,
android.R.layout.simple_list_item_1, arrayOfWebData);
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.listitem, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.populateFrom(arrayOfWebData.get(position));
return (convertView);
}
}
class ViewHolder {
public TextView name = null;
public TextView estado = null;
public TextView ciudad = null;
ViewHolder(View row) {
name = (TextView) row.findViewById(R.id.periodicoName);
estado = (TextView) row.findViewById(R.id.periodicoEstado);
ciudad = (TextView) row.findViewById(R.id.periodicoCiudad);
}
void populateFrom(webResult r) {
name.setText(r.Name);
estado.setText(r.Estado);
ciudad.setText(r.Ciudad);
}
}
wie Sie sehen können, ich' anzeigen der vollständigen Liste der Spalten, die Namen der Stände und Städte in meiner Liste ansehen, aber die Liste enthält Elemente, die in der medio-Spalte sind entweder periodisch oder radio, also, wie kann ich meinen adapter unterscheiden und wählen, ob nur diejenigen, die Hexe medio=periodico, von dort könnte ich vielleicht in der Lage, das Gegenteil zu tun, um wählen Sie die medio=radio
Tahnks
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann nicht testen Sie diesen code, aber hier ist etwas, was funktionieren könnte
1) Erstellen Sie eine weitere Liste, die hält nur die gefilterten Elemente
2) Erstellen Sie eine Methode im adapter, können Sie den "Typ" (periodico oder radio)
String Typ;
}
3) können Sie außer Kraft setzen müssen getCount () - Methode, um die Anzahl der gefilterten Elemente, anstatt die vollständige Liste
4) In Ihren Anzeigen, Lesen Sie die Informationen aus der gefilterten Liste
5) Von der main-Methode aufrufen, SetType, Wann immer Sie wollen, ändern Sie die filter
6) Von der main-Methode aufrufen
adapter.notifyDataSetChanged()
auf den adapter, nachdem Sie geändert haben, auch die filterIn der benutzerdefinierten Liste die Aktivität, entfernen Sie die Elemente, die u nicht brauchen, und speichern Sie die Liste in eine temp-Liste und übergeben Sie die temp Liste zu Ihrem adapter.
Erstellen einer xml-layout-Ordner fake.xml
ist es genug, wenn Sie dies tun:
Wird es nicht mehr als 3 Ergebnisse (0,1,2)