2013-05-22 88 views
0

對不起, 我想嘗試Facebook教程的開發人員。在Show Friends部分。 我已成功執行步驟hello Scrumptious,Autenticate with loginpersonalize部分。 在朋友展示的一部分,我得到錯誤方法getRequestCode()未定義類型SelectionFragment

的方法getRequestCode()是未定義的類型 SelectionFragment

我之前使用API​​ 17級。然後嘗試更改爲API級別10,我收到很多錯誤。然後我切換到API Level 8,然後出現以前的錯誤。 getRequestCode()方法仍然不起作用。

你能幫我提供任何線索錯誤嗎?我試圖在互聯網上搜索,但是,我真的不知道是什麼問題。我嘗試重新閱讀教程,製作新的項目,然後嘗試多次仍然失敗。

請幫忙。

謝謝。

package com.firstfbapp; 

import java.util.ArrayList; 
import java.util.List; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 
import com.facebook.Request; 
import com.facebook.Response; 
import com.facebook.Session; 
import com.facebook.SessionState; 
import com.facebook.UiLifecycleHelper; 
import com.facebook.model.GraphUser; 
import com.facebook.widget.ProfilePictureView; 

public class SelectionFragment extends Fragment { 
    private static final String TAG = "SelectionFragment"; 
    private ProfilePictureView profilePictureView; 
    private TextView userNameView; 
    private UiLifecycleHelper uiHelper; 
    private ListView listView; 
    private List<BaseListElement> listElements; 
    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(final Session session, final SessionState state, 
       final Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 
    private static final int REAUTH_ACTIVITY_CODE = 100; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     uiHelper = new UiLifecycleHelper(getActivity(), callback); 
     uiHelper.onCreate(savedInstanceState); 
    } 

    public void onClick(View view) { 
     // Do nothing for now 
     startPickerActivity(PickerActivity.FRIEND_PICKER, getRequestCode()); 
    } 

    @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 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     View view = inflater.inflate(R.layout.selection, container, false); 
     // Check for an open session 
     Session session = Session.getActiveSession(); 
     if (session != null && session.isOpened()) { 
      // Get the user's data 
      makeMeRequest(session); 
     } 
     // 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)); 

     return view; 
    } 

    private void startPickerActivity(Uri data, int requestCode) { 
     Intent intent = new Intent(); 
     intent.setData(data); 
     intent.setClass(getActivity(), PickerActivity.class); 
     startActivityForResult(intent, requestCode); 
    } 

    @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 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()); 
          } 
         } 
         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); 
     } 
    } 

    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; 
      // Set up as an observer for list item changes to 
      // refresh the view. 
      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 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) { 
        // Do nothing for now 
       } 
      }; 
     } 
    } 
} 
+0

發佈與'SelectionFragment'相關的代碼的相關部分。然而,這個消息只是解釋了'SelectionFragment'類沒有任何'getRequestCode'方法。 – 5agado

+0

哦,是的,先生..我已經附加了代碼。請審查,並請提供建議。謝謝。 – chameleon

+0

getRequestCode的作用是什麼?你確定它不是getTargetRequestCode? –

回答

1

從我所看到的你必須擴展FragmentActivity而不是Fragment在本教程爲說:「首先,在你的包名爲‘’PickerActivity'的子類FragmentActivity一類新
其次,您在片段的onClick中調用getRequestCode(),而不是PeopleListElement中的一個。

+0

先生,我的PickerActivity已經是FragmentActivity的子類。 – chameleon

+0

對不起,我混合了應用程序的類定義..但我的答案的第二部分是正確的,'getRequestCode()'是'BaseListElement'的一個方法,並且你把它放在片段的onClick中。 – 5agado

+0

也許我錯了把onClick方法放在SelectionFragment類中。那麼,我應該在哪裏放置onClick方法? – chameleon

0

我修改PeopleListElement爲以下

private class PeopleListElement extends BaseListElement { 
    private int requestCode; 
    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); 
     this.requestCode = requestCode; 
    } 

    @Override 
    protected View.OnClickListener getOnClickListener() { 
     return new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       startPickerActivity(PickerActivity.FRIEND_PICKER, requestCode); 
      } 
     }; 
    } 
} 

我宣佈一個在PeopleListElement名爲 「requestCode」 變量。無論何時調用PeopleListElement的構造函數,都會爲該變量分配一個值。然後我用「requestCode」替換getRequestCode()。

相關問題