intent.putExtra(FriendPickerFragment.USER_ID_BUNDLE_KEY, userId);
intent.putExtra(FriendPickerFragment.MULTI_SELECT_BUNDLE_KEY, multiSelect);
intent.putExtra(FriendPickerFragment.SHOW_TITLE_BAR_BUNDLE_KEY, showTitleBar);
userId 為顯示哪個user的朋友,預設為登入本人 (null)
multiSelect 是否可以多選
SHOW_TITLE_BAR_BUNDLE_KEY 文件並沒有解釋,如果設為false 就不會出現 Choose Friends的title 以及 done的按鈕,如下圖。
使用startActivityForResult讓我們在選取完成並按下done之後可以將資料回傳給呼叫者,
但是在這邊會遇到一個問題,List<GraphUser> 並不能利用 intent 傳送資料
所以在 facebook的sample code裡面,利用了application來傳遞資料,
我覺得這不是一個很好的解決方案,所以花了點時間去思考較好的方法,
讓我們看看下面的sample Code
Intent intent = new Intent(); ArrayList<String> vals = new ArrayList<String>(); for(GraphUser user: friendPickerFragment.getSelection()){ vals.add(user.getInnerJSONObject().toString()); } intent.putStringArrayListExtra("list",vals); setResult(RESULT_OK, intent); finish();
利用getInnerJSONObject().toString() 將資料轉成String 並且利用 putStringArrayListExtra將資料放進intent以便於傳送至呼叫者,在呼叫端利用下面的程式碼還原
List<String> vals= new ArrayList<String>(); vals = data.getStringArrayListExtra("list"); String result=""; try { for (String val : vals) { JSONObject jsonObj; jsonObj = new JSONObject(val); GraphUser user = GraphObject.Factory.create(jsonObj, GraphUser.class); result += user.getName()+"\n"; Log.d("Ted", user.getName()); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); }將取得的String轉成JSONObject之後,再利用GraphObject.Factory 轉回GraphUser,
這樣我們就可以取得原本的資料了(雖然要經過一小段的轉換)。
最近又有機會接觸 facebook sdk ,我想之後應該還會有幾篇相關的介紹吧!!
沒有留言:
張貼留言