3

我正在创建一个社交应用程序并希望与 Facebook 集成,这样我就可以获取有关朋友、用户信息的信息,以在用户墙上发布并将图片上传到 Facebook。我已经按照 Facebook 网站上的教程进行了操作,但是它们都在使用 Fragments。如果可能的话,我宁愿不使用片段。我确信 Facebook 不会将他们的 API 与 Fragments 的使用联系起来,因为这可能会将某些人拒之门外。

我知道明确的答案是使用带有片段的最新 API,但是出于以下原因,我宁愿不这样做:

  • 我不明白为什么没有 Fragments 就无法做到这一点。
  • 我不完全理解 Fragments 的意义以及它们为何越来越受欢迎。
  • 我在没有使用 Fragments 的情况下实现了大部分应用程序,并且希望在开发的这个阶段实现 Facebook 登录/使用。

话虽如此,如果不使用 Fragments,我怎么能做到这一点?

为什么 Fragment 越来越受欢迎?

如果答案是将 Facebook API 与 Fragments 一起使用,是否有一种“简单”的方法来更改我已经创建的应用程序,它使用了活动,以便它使用 Fragments?

干杯,

杰克

4

4 回答 4

1

我正在使用 Fragments,但我已经使用活动实现了 Facebook 登录按钮。

我刚刚在布局中声明了按钮

<com.facebook.widget.LoginButton
    android:id="@+id_login/btEntrarFacebook"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_bg_bt_azul"
    android:layout_below="@+id_login/btEntrar"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp"
    android:textColor="#ffffff"
    android:textSize="16dp"
    android:typeface="serif"
    android:text="f | Entre com o Facebook"/>

并在活动中:

btEntrarFacebook = (LoginButton) findViewById(R.id_login.btEntrarFacebook);

SDK 示例带有 Activity 和 Fragments 实现。教程不够清晰,但示例比自己的 Facebook 手册要好得多。

于 2013-08-08T00:55:58.007 回答
0

有许多网站会告诉您使用片段相对于活动的优势。一个非常重要的原因是,由于现在不同设备的屏幕尺寸变化很大,所以使用碎片网络我们可以很好地利用不同的屏幕尺寸。

将 Activity 更改为 Fragmnet 非常简单,因为这两个组件的生命周期和 API 几乎相同。可能您可以在 15-20 分钟内将活动更改为片段:)

试一试 ..

于 2013-08-08T00:44:14.253 回答
0

片段的概念就像 - 有一个 FragmentActivity。它就像普通的碎片网络,反过来又拥有不同的碎片网络。我将尝试用 android 开发者网站中的示例向您解释。假设我们正在研究平板电脑。我们可以有一个布局,它可以有左窗格和右窗格。两个窗格是两个不同的碎片网。左窗格将包含菜单项,单击任何项​​目时,将显示右窗格。由于平板电脑屏幕很大,我们可以在屏幕上显示两个窗格,用户使用起来很容易。可能像新闻应用程序。但是这种设计在小手机屏幕上看起来不太好。在这种情况下,fragmnets 窗格将自动分成两个屏幕,您可以在它们之间滑动。现在每个窗格都将占据全屏。所以没有你做任何事情,fragment 负责屏幕大小以调整其布局。也通常在纵向模式下,它们显示为选项卡,但在水平模式下,它们变成下拉菜单..

于 2013-08-08T01:31:09.657 回答
-1

如果您想要有关如何将活动切换为片段的示例参考。我正在添加我的示例活动和片段。

// Now this is the Activity class which I have to convert to fragments
TestActivity.java 

public class TestActivity extends Activity implements OnClickListener {

private static EditText edittext;
private static Button button;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first);

    edittext = (EditText) findViewById(R.id.et_price);
    button = (Button) findViewById(R.id.bt_bold);
    button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v.equals(button)) {
        edittext.setText("Arshad's Test App");
    }
}
}

现在要将 TestActivity 转换为 Fragment,我们需要将其分为两个类。TestActivity.java 和 TestFragment.java

// Now the TestActivity will extend the FragmentActivity instead of Activity
public class TestActivity extends FragmentActivity {

private TestFragment testFragment_object;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (savedInstanceState == null) {
        // Add the fragment on initial activity setup
        testFragment_object = new TestFragment();
        getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, testFragment_object).commit();
    } else {
        // Or set the fragment from restored state info
        testFragment_object = (TestFragment) getSupportFragmentManager()
                .findFragmentById(android.R.id.content);
    }
}
}

现在,Fragment 类将包含要在之前包含在 Activity 类中的类中执行的布局和操作的所有代码。

TestFragment.java

public class TestFragment extends Fragment implements OnClickListener {

private static EditText edittext;
private static Button button;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_first, container, false);

    edittext = (EditText) view.findViewById(R.id.et_price);
    button = (Button) view.findViewById(R.id.bt_bold);
    button.setOnClickListener(this);

    return view;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v.equals(button)) {
        edittext.setText("Arshad's Test App");
    }
}
}
于 2013-08-08T06:26:30.340 回答