Ich lade ListView aus der Firebase-Datenbank und möchte, dass beim Laden der ListView eine Fortschrittsanzeige angezeigt wird.Wie zeige ich den Fortschrittsbalken beim Laden von ListView an?
Ich habe einige Anleitungen gelesen und ich habe etwas versucht, aber es funktioniert nicht für mich.
Dies ist mein Code:
public class Event_List_Activity extends Activity {
private static final String FIREBASE_URL="https://****.firebaseio.com/";
private Firebase firebaseRef;
final ProgressBar pb=(ProgressBar)findViewById(R.id.progressBar);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_event__list_);
Firebase.setAndroidContext(this);
firebaseRef = new Firebase(FIREBASE_URL);
//populateEventList();
new MyTask().execute();
final ListView listView = (ListView)findViewById(R.id.listView1);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
openEventInfo(parent,view,position,id);
}
});
}
class MyTask extends AsyncTask<String,Integer,String>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
}
@Override
protected String doInBackground(String...strings)
{
populateEventList();
return null;
}
@Override
protected void onProgressUpdate(Integer...values)
{
super.onProgressUpdate(values);
pb.setProgress(values[0]);
}
@Override
protected void onPostExecute(String s)
{
super.onPostExecute(s);
}
}
private void populateEventList()
{
firebaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
ArrayList<String> subTitles = new ArrayList<String>();
ArrayList<EventClass> eventList = new ArrayList<EventClass>();
ArrayList<String> titles = new ArrayList<String>();
for (DataSnapshot user : snapshot.child("users").getChildren()) {
String event_title = user.child("event/event_title").getValue().toString();
String event_date = user.child("event/event_date").getValue().toString();
subTitles.add(event_date);
String event_content = user.child("event/event_content").getValue().toString();
String age_limit = user.child("event/age_limit").getValue().toString();
String event_hour = user.child("event/event_hour").getValue().toString();
String location_left = user.child("location_left").getValue().toString();
String location_right = user.child("location_right").getValue().toString();
EventClass oneEvent = new EventClass(event_title, event_date, event_content, age_limit, event_hour, location_left, location_right);
eventList.add(oneEvent);
}
for (EventClass event : eventList) {
titles.add(event.getEvent_title());
}
ArrayAdapter adapter = new ArrayAdapter(Event_List_Activity.this, android.R.layout.simple_list_item_1, titles) {
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView textView = (TextView) view.findViewById(android.R.id.text1);
textView.setTextColor(Color.WHITE);
return view;
}
};
ListView listView = (ListView) findViewById(R.id.listView1);
listView.setAdapter(adapter);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
String message = "Error";
Toast.makeText(Event_List_Activity.this, message, Toast.LENGTH_SHORT).show();
}
});
}
private void openEventInfo(AdapterView<?> parent, View view, int position, long id)
{
final String selectedTitle = parent.getItemAtPosition(position).toString();
firebaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot user : dataSnapshot.child("users").getChildren()) {
String event_title = user.child("event/event_title").getValue().toString();
if (selectedTitle.equals(event_title)) {
String event_date = user.child("event/event_date").getValue().toString();
String event_content = user.child("event/event_content").getValue().toString();
String age_limit = user.child("event/age_limit").getValue().toString();
String event_hour = user.child("event/event_hour").getValue().toString();
String location_left = user.child("location_left").getValue().toString();
String location_right = user.child("location_right").getValue().toString();
final SharedPreferences sp = getSharedPreferences("key", 0);
final SharedPreferences.Editor sedt = sp.edit();
sedt.putString("event_title", event_title);
sedt.putString("event_date", event_date);
sedt.putString("event_content", event_content);
sedt.putString("age_limit", age_limit);
sedt.putString("event_hour", event_hour);
sedt.putString("location_left", location_left);
sedt.putString("location_right", location_right);
sedt.commit();
}
}
Intent intent = new Intent(Event_List_Activity.this, EventInfo.class);
startActivity(intent);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Toast.makeText(Event_List_Activity.this, "Error", Toast.LENGTH_LONG).show();
}
});
}
}
Nach Kommentar zu lesen, das ist die Veränderung, die ich in meiner MyTask()
Methode gemacht habe:
class MyTask extends AsyncTask<String,Integer,String>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
listView.setVisibility(View.INVISIBLE);
pb.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(String...strings)
{
populateEventList();
return null;
}
@Override
protected void onProgressUpdate(Integer...values)
{
super.onProgressUpdate(values);
pb.setProgress(values[0]);
pb.setMax(values[1]);
}
@Override
protected void onPostExecute(String s)
{
super.onPostExecute(s);
pb.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
}
}
Hallo, können Sie mir bitte ein Beispiel geben? Ich habe keine Ahnung, wie es geht ... – Gilad1512
Überprüfen Sie meine Bearbeitung ... – user0815
Hallo, zuerst, danke für den Kommentar! Zweitens habe ich nicht verstanden, was in der Zeile zu tun, die Sie geschrieben haben 'Dann in doInBackground jedes Mal, wenn Sie einen neuen Datensatz erhalten, rufen Sie publishProgress (aktuell, max) mit vielleicht die aktuelle Anzahl der empfangenen Daten und die maximale Menge Was ist der Strom und was ist das Maximum? Und was meinst du, wenn du jedes Mal sagst, wenn ich einen neuen Datensatz erhalte? – Gilad1512