簡體   English   中英

Android在Activity中的片段內創建按鈕

[英]Android create a button inside a Fragment from an Activity

因此,我嘗試使用Java尤其是Android編程。 但是我對此很陌生,所以請耐心等待:-)對於您的Android和Java專家來說,這可能非常簡單。

我要完成的任務是遍歷所有朋友,並為每個朋友創建一個按鈕。 循環部分有效,但按鈕的創建無效。 您可以在代碼中看到我已經嘗試過的內容。 Facebook示例使用兩個活動:MainActivity,PickerActivity和兩個片段:SplashFragment,SelectFragment。 我為每個活動和每個片段都有一個布局。 我想將按鈕放在selection.xml布局上,但是我不確定如何做到這一點。 我希望我能說清楚:-)

我所做的是,使用facebook sdk和我試圖增強加解密器的Scrumptious示例。 該示例,尤其是friendpicker已經有效。 它顯示了我所有的朋友,我可以選擇它們,單擊“確定”后,可以使用friendPickerFragment.getSelection();來獲取它們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:公共類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負責創建朋友列表。 如果我是對的,那么您需要做的就是。

  1. 更改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" /> 
  2. 更改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; } } 

希望我沒有誤會代碼的工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM