我真的堅持這一點,不能前進我試圖將谷歌日曆事件填充到列表視圖中,並沒有看到任何結果。我很抱歉發佈這樣冗長的代碼,但我真的被卡住了! 我的活動ListView無法加載數據
public class EventListActivity extends Activity {
private List<Events> events = new ArrayList<Events>();
private Handler handler = new Handler();
private ProgressDialog progressBar;
private SelectableEventsAdapter eventsAdapter;
@Override
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
getAccount();
setContentView(R.layout.layout_main);
setEventsListView();
}
private void setEventsListView() {
Log.i("ReachedsetEvents", "Reached set Events view 1");
final ListView eventsListView = (ListView) findViewById(R.id.list_main);
eventsAdapter = new SelectableEventsAdapter(this, events);
//eventsAdapter.getView(0, eventsListView, eventsListView);
eventsAdapter.setAdapter(eventsAdapter);
Log.i("ReachedsetEvents", "Reached set Events view 2");
eventsAdapter.sort();
private void retrieveEvents() {
// Retrieves the attendees on a separate thread.
new Thread(new Runnable() {
public void run() {
EventsRetriever eventsRetriever =
new EventsRetriever(EventListActivity.this, OAuthManager.getInstance()
.getAccount());
final List<Events> newevents = eventsRetriever.getEvents();
Log.i("reachedRetrieve", "reached retrieve");
// Update the progress bar
handler.post(new Runnable() {
public void run() {
if (newevents != null) {
events.clear();
events.addAll(newevents);
eventsAdapter.sort();
eventsAdapter.notifyDataSetChanged();
}
Log.d(Constants.TAG, "Got attendees, dismissing progress bar");
if (progressBar != null) {
progressBar.dismiss();
Log.d(Constants.TAG, "Progress bar should have been dismissed");
}
}
});
}
}).start();
// Show a progress bar while the attendees are retrieved from the phone's
// database.
progressBar =
ProgressDialog.show(this, null, getString(R.string.retrieve_contacts_wait_text), true);
}
@Override
protected void onResume() {
super.onResume();
// getAccount();
}
/**
* Prompt user to choose an account and retrieve attendees from phone's
* database.
*/
private void getAccount() {
OAuthManager.getInstance().doLogin(false, this, new OAuthManager.AuthHandler() {
public void handleAuth(Account account, String authToken) {
if (account != null) {
retrieveEvents();
}
}
});
}}
我的自定義適配器
public SelectableEventsAdapter(Context context, List<Events> items) {
super(context, R.layout.layout_main,items);
inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Events item = getItem(position);
LinearLayout eventsView = getView(convertView);
setViews(item, eventsView);
return eventsView;
}
private LinearLayout getView(View convertView) {
Log.i("Reached", "Reached getView long");
LinearLayout eventsView;
if (convertView == null) {
eventsView = new LinearLayout(getContext());
inflater.inflate(R.layout.layout_main,eventsView,true);
} else {
eventsView = (LinearLayout) convertView;
}
return eventsView;
}
private void setViews(Events item, LinearLayout eventsView) {
setTitleView(item, eventsView);
}
private void setTitleView(Events item, LinearLayout eventsView) {
ListView titleView = (ListView) eventsView.findViewById(R.id.list_main);
titleView.setEnabled(true);
//titleView.setText(item.title);
}
和獲取事件的獵犬:
public EventsRetriever(Activity activity, Account account) {
this.activity = activity;
this.account = account;
}
public static final String[] FIELDS = {
CalendarContract.Events.TITLE,
CalendarContract.Events.DESCRIPTION,
CalendarContract.Events.ORGANIZER,
CalendarContract.Events.STATUS,
CalendarContract.Events.DTSTART,
CalendarContract.Events.EVENT_LOCATION,
};
public static final Uri CALENDAR_URI = Uri.parse("content://com.android.calendar/calendars");
String[] selectionArgs = new String[] {CalendarServiceBuilder.ACCOUNT_NAME, Constants.ACCOUNT_TYPE,
CalendarServiceBuilder.ACCOUNT_NAME};
/**
* Get the list of user's contacts.
*
* @return The list of contacts.
*/
public List<Events> getEvents() {
List<Events> result = new ArrayList<Events>();
ContentResolver cr = activity.getContentResolver();
Cursor cursor =
cr.query(CalendarContract.Events.CONTENT_URI, FIELDS,null,null, null);
try {
if(cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String title =cursor.getString(cursor.getColumnIndex(
CalendarContract.Events.TITLE));
String description = cursor.getString(cursor.getColumnIndex(
CalendarContract.Events.DESCRIPTION));
String organizer = cursor.getString(cursor.getColumnIndex(
CalendarContract.Events.ORGANIZER));
String status = cursor.getString(cursor.getColumnIndex(
CalendarContract.Events.STATUS));
String location = cursor.getString(cursor.getColumnIndex(
CalendarContract.Events.EVENT_LOCATION));
result.add(new Events(title,description,organizer,status,location));
Log.i("Reachedretriever", "Reached retriever");
}
}}
finally {
cursor.close();
}
return result;
}}
我無法看到任何東西得到填充屏幕上!也只是爲了讓你知道我使用未經授權的Oauth進行api訪問。 layout_main.xml僅包含一個線性佈局中的ListView。 如果您需要更多信息,請讓我知道。
在您實例化SelectableEventsAdapter的地方,您是否已經過雙重檢查以確保您的事件列表不是空的? – Nick 2012-08-09 16:04:50
你的代碼:final ListView eventsListView =(ListView)findViewById(R.id.list_main); eventsAdapter = new SelectableEventsAdapter(this,events); eventsAdapter.setAdapter(eventsAdapter);你不需要爲ListView設置適配器嗎? – Olsavage 2012-08-09 16:07:33
@Olsavage是的,你是對的那是一個錯誤...我設置適配器,有一點改進,我剛剛看到我的進度條第一次,但仍然失去了一些東西...列表視圖仍然是空的 – SKen 2012-08-09 16:44:54