【发布时间】:2016-07-14 19:05:03
【问题描述】:
我正在从 Firebase 数据库加载 ListView,我希望它在加载 ListView 时会显示一个进度条。
我已经阅读了一些指南并尝试了一些方法,但它对我不起作用。
这是我的代码:
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();
}
});
}
}
阅读评论后,这是我在MyTask() 方法中所做的更改:
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);
}
}
【问题讨论】:
标签: android listview progress-bar