所以我尝试学习Java,尤其是Android编程。但我对此还很陌生,所以请耐心等待:-)这对Android和Java专家来说可能很简单。
我想完成的是循环浏览我所有的朋友,并为他们每个人创建一个按钮。循环部分起作用,而按钮的创建则不起作用。你可以在代码中看到我已经尝试过的内容。facebook示例使用两个Activities:MainActivity、PickerActivity和两个Fragments:SplashFragment、SelectFragment。我有一个每个活动和每个片段的布局。我想把按钮放在selection.xml布局上,但我不确定该怎么做。我希望我明确表示:-)
我所做的是,使用facebooksdk和我正在尝试增强friendpicker的Scrumptius示例。这个例子,尤其是friendpicker已经起作用了。它向我所有的朋友显示我可以选择他们,点击OK后,我可以使用friendPickerFragment.getSelection();
获得他们
来自PickerActivity.java:的代码
friendPickerFragment.setOnDoneButtonClickedListener(
new PickerFragment.OnDoneButtonClickedListener() {
@Override
public void onDoneButtonClicked(PickerFragment<?> fragment) {
//here I am getting the selected facebook user
List<GraphUser> FriendListToPlay = friendPickerFragment.getSelection();
for (GraphUser User: FriendListToPlay) {
Log.i("info",User.getId()+' '+User.getName());
/* create button for every facebook user chosen
Button myButton = new Button(PickerActivity.this);
myButton.setText(User.getName() + " waiting for game");
LinearLayout ll = (LinearLayout)findViewById(R.id.linear_view);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
ll.addView(myButton, lp);
*/
}
finishActivity();
}
});
选择片段:公共类SelectionFragment扩展Fragment{
public static String OwnId = "";
public static GraphUser OwnUser = null;
private static final String TAG = "SelectionFragment";
private static final int REAUTH_ACTIVITY_CODE = 100;
private ProfilePictureView profilePictureView;
private TextView userNameView;
private ListView listView;
private List<BaseListElement> listElements;
private UiLifecycleHelper uiHelper;
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(final Session session, final SessionState state, final Exception exception) {
onSessionStateChange(session, state, exception);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.selection,
container, false);
// Find the user's profile picture custom view
profilePictureView = (ProfilePictureView) view.findViewById(R.id.selection_profile_pic);
profilePictureView.setCropped(true);
// Find the user's name view
userNameView = (TextView) view.findViewById(R.id.selection_user_name);
// Find the list view
listView = (ListView) view.findViewById(R.id.selection_list);
// Set up the list view items, based on a list of
// BaseListElement items
listElements = new ArrayList<BaseListElement>();
// Add an item for the friend picker
listElements.add(new PeopleListElement(0));
// Set the list view adapter
listView.setAdapter(new ActionListAdapter(getActivity(),
R.id.selection_list, listElements));
// Check for an open session
Session session = Session.getActiveSession();
if (session != null && session.isOpened()) {
// Get the user's data
makeMeRequest(session);
}
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REAUTH_ACTIVITY_CODE) {
uiHelper.onActivityResult(requestCode, resultCode, data);
} else if (resultCode == Activity.RESULT_OK) {
// Do nothing for now
}
}
private void makeMeRequest(final Session session) {
// Make an API call to get user data and define a
// new callback to handle the response.
Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
// If the response is successful
if (session == Session.getActiveSession()) {
if (user != null) {
// Set the id for the ProfilePictureView
// view that in turn displays the profile picture.
profilePictureView.setProfileId(user.getId());
// Set the Textview's text to the user's name.
userNameView.setText(user.getName());
OwnId = user.getId();
OwnUser = user;
//ServiceAsyncTask task = new ServiceAsyncTask();
//task.run();
}
}
if (response.getError() != null) {
// Handle errors, will do so later.
}
}
});
request.executeAsync();
}
private void onSessionStateChange(final Session session, SessionState state, Exception exception) {
if (session != null && session.isOpened()) {
// Get the user's data.
makeMeRequest(session);
}
}
@Override
public void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
public void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
uiHelper.onSaveInstanceState(bundle);
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
private class PeopleListElement extends BaseListElement {
public PeopleListElement(int requestCode) {
super(getActivity().getResources().getDrawable(R.drawable.action_people),
getActivity().getResources().getString(R.string.action_people),
getActivity().getResources().getString(R.string.action_people_default),
requestCode);
}
@Override
protected View.OnClickListener getOnClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View view) {
startPickerActivity(PickerActivity.FRIEND_PICKER, getRequestCode());
}
};
}
@Override
protected void populateOGAction(OpenGraphAction action) {
// TODO Auto-generated method stub
}
}
private class ActionListAdapter extends ArrayAdapter<BaseListElement> {
private List<BaseListElement> listElements;
public ActionListAdapter(Context context, int resourceId, List<BaseListElement> listElements) {
super(context, resourceId, listElements);
this.listElements = listElements;
for (int i = 0; i < listElements.size(); i++) {
listElements.get(i).setAdapter(this);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater =
(LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.listitem, null);
}
BaseListElement listElement = listElements.get(position);
if (listElement != null) {
view.setOnClickListener(listElement.getOnClickListener());
ImageView icon = (ImageView) view.findViewById(R.id.icon);
TextView text1 = (TextView) view.findViewById(R.id.text1);
TextView text2 = (TextView) view.findViewById(R.id.text2);
if (icon != null) {
icon.setImageDrawable(listElement.getIcon());
}
if (text1 != null) {
text1.setText(listElement.getText1());
}
if (text2 != null) {
text2.setText(listElement.getText2());
}
}
return view;
}
}
private void startPickerActivity(Uri data, int requestCode) {
Intent intent = new Intent();
intent.setData(data);
intent.setClass(getActivity(), PickerActivity.class);
startActivityForResult(intent, requestCode);
}
public void createButton() {
}
}
好吧,这是我在不完全了解代码的情况下所能做的最好的事情。
据我所知,ActionListAdapter负责创建好友列表。如果我是对的,那么你需要做的就是。
-
更改res/layout/listitem,添加一个带有id的Button视图,为了示例起见,让它成为btn_friend
// Somewhere in res/layout/listitem <Button android:id="@+id/btn_friend" android:layout_width="wrap_content" android:layout_height="wrap_content" />
-
更改ActionListAdapter以设置文本侦听点击
private class ActionListAdapter extends ArrayAdapter<BaseListElement> { private List<BaseListElement> listElements; public ActionListAdapter(Context context, int resourceId, List<BaseListElement> listElements) { super(context, resourceId, listElements); this.listElements = listElements; for (int i = 0; i < listElements.size(); i++) { listElements.get(i).setAdapter(this); } } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.listitem, null); } BaseListElement listElement = listElements.get(position); if (listElement != null) { view.setOnClickListener(listElement.getOnClickListener()); ImageView icon = (ImageView) view.findViewById(R.id.icon); TextView text1 = (TextView) view.findViewById(R.id.text1); TextView text2 = (TextView) view.findViewById(R.id.text2); Button btn = (Button) view.findViewById(R.id.btn_friend); if (icon != null) { icon.setImageDrawable(listElement.getIcon()); } if (text1 != null) { text1.setText(listElement.getText1()); } if (text2 != null) { text2.setText(listElement.getText2()); } if (btn != null) { // I do not know exactly what text1 and text2 is btn.setText(text1 + " waiting for game"); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getActivity(), text1+ " " + text2 + " clicked!", Toast.LENGTH_SHORT).show(); } }); } } return view; } }
希望我没有误解代码的工作原理。