Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到片段类_Java_Android_Android Fragments - Fatal编程技术网

Java 未找到片段类

Java 未找到片段类,java,android,android-fragments,Java,Android,Android Fragments,我刚刚开始开发我的第一个Android应用程序,我的重点是该应用程序的主要活动,MathleteIDActivity,其中包括一个显示一些文本的片段textframent 该项目构建良好,但一旦应用程序启动就会崩溃。这发生在运行Android4.x.x的两款不同的手机上,因此碎片支持不应该成为问题。来自adb logcat的stacktrace如下所示(包已编辑): MathleteIDActivity.java内容如下: package foo.bar.baz.id; import andr

我刚刚开始开发我的第一个Android应用程序,我的重点是该应用程序的主要活动,
MathleteIDActivity
,其中包括一个显示一些文本的片段
textframent

该项目构建良好,但一旦应用程序启动就会崩溃。这发生在运行Android
4.x.x
的两款不同的手机上,因此碎片支持不应该成为问题。来自adb logcat的stacktrace如下所示(包已编辑):

MathleteIDActivity.java
内容如下:

package foo.bar.baz.id;

import android.widget.TextView;
import android.os.Bundle;
import foo.bar.baz.R;

public final class MathleteIDActivity extends NFCIDActivity {
    @Override
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        TextView textView = (TextView) findViewById(R.id.fragment_text);
        textView.setText("Scan mathlete tag");
    }
}
package foo.bar.baz.fragments;

import android.app.Fragment;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import foo.bar.baz.R;

public final class TextFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.text_fragment, container, false);
    }
}
NFCIDActivity
是一个抽象类,它扩展了Android的
活动。它唯一的方法是重写onCreate的
onCreate

@Override
public void onCreate(Bundle savedState) {
    super.onCreate(savedState);
    setContentView(R.layout.id_activity);
}
TextFragment.java
的内容如下:

package foo.bar.baz.id;

import android.widget.TextView;
import android.os.Bundle;
import foo.bar.baz.R;

public final class MathleteIDActivity extends NFCIDActivity {
    @Override
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        TextView textView = (TextView) findViewById(R.id.fragment_text);
        textView.setText("Scan mathlete tag");
    }
}
package foo.bar.baz.fragments;

import android.app.Fragment;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import foo.bar.baz.R;

public final class TextFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.text_fragment, container, false);
    }
}
src/main/res/layout/id\u activity.xml中,我定义了活动布局:

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <fragment
        android:name=".fragments.TextFragment"
        android:id="@+id/id_message" >
    </fragment>
</LinearLayout>
我已经试过了:

  • TextFragment
    添加公共的无参数构造函数。同样的错误
  • 通过其完全限定的包名
    foo.bar.baz.fragments.TextFragment
    引用布局文件中的片段。同样的错误,现在命名新包
  • TextFragment
    的源文件移动到顶级包
    foo.bar.baz
    并调整引用。同样的错误,现在命名新包

有什么想法吗?

使用
FragmentManager
以编程方式实例化片段,作为快速解决方案:

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

TextFragment tf = new TextFragment();
ft.replace(R.id.container, tf);
ft.commit();

至于您的方法,请改用规范的包名,并干净地构建您的项目。然后注意错误消息(它不能是“同一个错误”,因为它至少应该提到不同的包名)。

使用
FragmentManager
以编程方式实例化片段,作为快速解决方案:

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

TextFragment tf = new TextFragment();
ft.replace(R.id.container, tf);
ft.commit();

至于您的方法,请改用规范的包名,并干净地构建您的项目。然后注意错误消息(它不能是“相同的错误”,因为它至少应该提到不同的包名)。

我们能看到MathleteIDActivity.java和TextFragment.java的代码吗?还有,你的碎片有自己的布局吗?是的。我已经添加了这些信息。你能发布你的
build.gradle
?您是否尝试过使用
FragmentManager
以编程方式实例化片段?如果是这样,您是否会遇到相同的错误?请查看
build.gradle
。我不熟悉FragmentManager,但我会研究它并发布更新。@KarsenGauss有趣的是,以编程方式创建和添加片段效果很好。我们可以看看MathleteIDActivity.java和TextFragment.java的代码吗?还有,你的碎片有自己的布局吗?是的。我已经添加了这些信息。你能发布你的
build.gradle
?您是否尝试过使用
FragmentManager
以编程方式实例化片段?如果是这样,您是否会遇到相同的错误?请查看
build.gradle
。我不熟悉FragmentManager,但我会研究它并发布更新。@KarsenGauss有趣的是,以编程方式创建和添加片段效果很好。错误消息中引用的包确实发生了更改。完全限定的包名加上干净的构建修复了这个问题。这是Java解决方案,当然,但是使用片段的XML方法呢?错误消息中引用的包确实发生了变化。完全限定的包名加上干净的构建修复了这个问题。当然,这是Java解决方案,但是使用片段的XML方法呢?