【问题标题】:android.support.v5.app.Fragment or android.app.Fragment?android.support.v5.app.Fragment 还是 android.app.Fragment?
【发布时间】:2014-12-02 10:56:51
【问题描述】:

我使用的是 Android Studio 1.0 Rc1。

我已经创建了一个 MainActivity(TabbedActivity):

public class MainActivity extends ActionBarActivity implements ActionBar.TabListener

它进口:

...
import android.support.v4.app.Fragment;
...

所以问题来了: 我又做了一个 FragmentActivity:

public class BlankFragment extends Fragment {

关于进口的:

现在我想这样做:

public Fragment getItem(int position) {
    // getItem is called to instantiate the fragment for the given page.
    // Return a PlaceholderFragment (defined as a static inner class below).

    switch (position){
        case 0:
            return ScoutLogFragment.newInstance("a","b");
        case 1:
            return  BlankFragment.newInstance("a", "b");
        case 2:
            return PlaceholderFragment.newInstance(position + 1);
        default:
            return PlaceholderFragment.newInstance(position + 1);

    }

}

但它告诉我:

"必填:导入android.support.v4.app.Fragment; 找到:de.example.local.scouttools.BlankFragment"

如果我将主要活动导入更改为 android.app.Fragment; t 告诉我 getItem(int position) 的返回类型是错误的。

我不明白为什么一个导入 android.app.Fragment 而另一个导入 android.support.app.v4.Fragment, 如何解决?

【问题讨论】:

  • 您是否尝试手动更改导入?

标签: android android-fragments


【解决方案1】:

这始终取决于运行您的 Fragments 的设备。

Support V4 与支持库一起使用。

可以在build.gradle中用

导入
compile 'com.android.support:support-v4:21.0.0'

如果您不使用支持库,则只有 Android 3.0 或更高版本的设备才能使用您的 Fragment。

如果您使用支持库,所有至少 2.1 的设备都可以使用您的 Fragments。

注意:如果您使用支持库,您的应用的文件大小会稍大一些。

确保为支持库导入正确的片段类。这是

import android.support.v4.app.Fragment;

如果您打算导入 ActionBar,您还需要支持库 v7。

导入是

import android.support.v7.app.ActionBarActivity;

所需的库可以通过 gradle 导入

compile 'com.android.support:appcompat-v7:21.0.0'

哦,您的 BlankFragment 似乎导入了错误的类。验证它是否也使用了 BlankFragment 类中的 v4 Fragment。

【讨论】:

  • 好吧,我试试。但我仍然不明白为什么他默认在我的 MainActivity 中导入支持库,而他在我的 BlankFragment 上导入 android.app.Fragment :s
  • 因为 Intellij 不分析其他来源。每个文件都会生成它自己的源。通常你应该得到一个提示来决定你要导入哪个片段类。
  • 好的,我刚刚将我的导入更改为 android.support.v4.Fragment(在 BlankFragment 处),现在它可以工作了......现在我制作了另一个 Fragment(listFragment),它还导入了 android .app.Fragment .. 我是否需要在将来制作的每个 Fragment 上手动将其更改为 android.support.v4.Fragment? :O
  • 是和不是。如果有两个类匹配相同的名称,通常应该提示您包含正确的片段类。您似乎已启用“自动导入”。转到文件->设置->编辑器->自动导入并启用“显示导入弹出窗口”。您还应该将 Insert Imports on Paste 更改为 Ask 并禁用 Add unambiguous imports on the fly。
猜你喜欢
  • 2015-08-09
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
相关资源
最近更新 更多