2014-11-24 29 views
0
package com.example.mindwareuae; 




import java.util.Arrays; 
import java.util.List; 

import android.content.Context; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.text.InputFilter.LengthFilter; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 


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.LoginButton; 
import com.facebook.widget.LoginButton.UserInfoChangedCallback; 

public class FacebokkFragment extends Fragment{ 

    private LoginButton loginBtn; 
    private Button postImageBtn; 
    private Button updateStatusBtn; 

    private TextView userName; 

    private UiLifecycleHelper uiHelper; 

    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); 


    View rootView; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     if (rootView != null) { 
      ViewGroup parent = (ViewGroup) rootView.getParent(); 
      if (parent != null) { 
       parent.removeView(rootView); 
      } 

     } 
     try 
     { 
     View rootView = inflater.inflate(R.layout.fragment_facebook,container,false); 
     userName = (TextView)rootView.findViewById(R.id.user_name); 
      loginBtn = (LoginButton) rootView.findViewById(R.id.fb_login_button); 
      loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() { 
       @Override 
       public void onUserInfoFetched(GraphUser user) { 
        if (user != null) { 
         userName.setText("Hello, " + user.getName()); 
        } else { 
         userName.setText("You are not logged"); 
        } 
       } 
      }); 


      postImageBtn = (Button)rootView.findViewById(R.id.fbpost_image); 
      postImageBtn.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View view) { 
        postImage(); 
       } 
      }); 

      updateStatusBtn = (Button)rootView.findViewById(R.id.fbupdate_status); 
      updateStatusBtn.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

       } 
      }); 

      buttonsEnabled(false); 

     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

     return rootView; 
     } 


     public void buttonsEnabled(boolean isEnabled) { 
      postImageBtn.setEnabled(isEnabled); 
      updateStatusBtn.setEnabled(isEnabled); 
     } 

     public void postImage() { 
      if (checkPermissions()) { 
       Bitmap img = BitmapFactory.decodeResource(getResources(), 
         R.drawable.ic_launcher); 
       Request uploadRequest = Request.newUploadPhotoRequest(
         Session.getActiveSession(), img, new Request.Callback() { 
          @Override 
          public void onCompleted(Response response) { 
           Toast.makeText(getActivity(), 
             "Photo uploaded successfully", 
             Toast.LENGTH_LONG).show(); 
          } 
         }); 
       uploadRequest.executeAsync(); 
      } else { 
       requestPermissions(); 
      } 
     } 

//  public void postStatusMessage() { 
//   if (checkPermissions()) { 
//    Request request = Request.newStatusUpdateRequest(
//      Session.getActiveSession(), message, 
//      new Request.Callback() { 
//       @Override 
//       public void onCompleted(Response response) { 
//        if (response.getError() == null) 
//         Toast.makeText(getActivity(), 
//           "Status updated successfully", 
//           Toast.LENGTH_LONG).show(); 
//       } 
//      }); 
//    request.executeAsync(); 
//   } else { 
//    requestPermissions(); 
//   } 
//  } 

     public boolean checkPermissions() { 
      Session s = Session.getActiveSession(); 
      if (s != null) { 
       return s.getPermissions().contains("publish_actions"); 
      } else 
       return false; 
     } 

     public void requestPermissions() { 
      Session s = Session.getActiveSession(); 
      if (s != null) 
       s.requestNewPublishPermissions(new Session.NewPermissionsRequest(
         this, PERMISSIONS)); 
     } 

//  @Override 
//  public void onResume() { 
//   super.onResume(); 
//   uiHelper.onResume(); 
//   buttonsEnabled(Session.getActiveSession().isOpened()); 
//  } 
// 
//  @Override 
//  public void onPause() { 
//   super.onPause(); 
//   uiHelper.onPause(); 
//  } 
// 
//  @Override 
//  public void onDestroy() { 
//   super.onDestroy(); 
//   if (rootView != null) { 
//    ViewGroup parentViewGroup = (ViewGroup) rootView.getParent(); 
//    if (parentViewGroup != null) { 
//     parentViewGroup.removeAllViews(); 
//    } 
//   } 
//   uiHelper.onDestroy(); 
//  } 

     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      uiHelper.onActivityResult(requestCode, resultCode, data); 
     } 

     @Override 
     public void onSaveInstanceState(Bundle savedState) { 
      super.onSaveInstanceState(savedState); 
      uiHelper.onSaveInstanceState(savedState); 
     } 
} 

我想登錄此fragment..but我沒有任何getiing東西我的XML文件中的facbook後黑屏是我的片段顯示我有這個代碼

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:facebook="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" 
    android:padding="20dp" 
    android:background="#EEEEEE"> 

    <com.facebook.widget.LoginButton 
     android:id="@+id/fb_login_button" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp" 
     facebook:confirm_logout="false" 
     facebook:fetch_user_info="true" /> 

    <TextView 
     android:id="@+id/fb_user" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="10dp" 
     android:textSize="18sp" /> 

    <Button 
     android:id="@+id/fbupdate_status" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="update_status" /> 

    <Button 
     android:id="@+id/fbpost_image" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="post_image" /> 

</LinearLayout> 

這是我的xml文件爲什麼我無法用我的Facebook登錄按鈕獲取片段。 請任何人都可以解釋我。

+0

您是否將您的片段添加到您的任何活動中? – 2014-11-24 10:51:49

+0

雅我添加了這個片段主要活動 – 2014-11-24 10:52:42

+0

好吧,然後嘗試我的代碼,這可能會幫助你 – 2014-11-24 10:55:19

回答

0
if (rootView != null) { 
      ViewGroup parent = (ViewGroup) rootView.getParent(); 
      if (parent != null) { 
       parent.removeView(rootView); 
      } 

     } 

這部分代碼真的需要嗎?嘗試刪除此。

試試這個

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_facebook, container, false); 

     ... 

     return rootView; 
+0

如果刪除該代碼,我得到以下eroor java.lang.IllegalStateException:指定的子項已經有一個父。您必須先調用孩子父母的removeView()第一個 – 2014-11-24 10:54:28

+0

檢查更新的部分 – vkm 2014-11-24 10:58:39

2

創建FragmentActivity並添加fragmentFragmentActivity

public class MainActivity extends FragmentActivity{ 
    FacebokkFragment fbFragment; 
    ArrayList<Fragment> fragemetnList; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     fbFragment = new FacebokkFragment(); 
     fragemetnList = getFragmnetsList(); 
     setContentView(R.layout.activity_main); 

    } 

    ArrayList<Fragment> getFragmnetsList() { 
     ArrayList<Fragment> fragments = new ArrayList<Fragment>(); 
     fragments.add(fbFragment); 
     // you can also add more fragments here 
     return fragments; 
    } 
} 

現在創建一個activity_main.xml中文件到您的RES /佈局目錄 別忘記將MainActivity輸入AndroidManifest.xml文件 此代碼可以解決您的問題

+0

現在它的顯示thw這樣的錯誤11-24 06:07:15.021:E/AndroidRuntime(3301):Process:com.example.mindwareuae,PID:3301 11-24 06:07:15.021:E/AndroidRuntime(3301):java.lang.NullPointerException – 2014-11-24 11:08:11

+0

將您通過其添加片段的代碼行替換爲我的活動,可能會工作。因爲我在我的項目中使用了這個代碼,而且它的工作非常好 – 2014-11-24 11:19:36

相關問題