0

我的 mainactivity.java 现在看起来像这样:

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class FirstTabFragment extends Fragment {


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    final View v = inflater.inflate(R.layout.main, null);
    final View button = v.findViewById(R.id.button2);
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            onlogin(v);
        }
    });
    return v;
}

public void onlogin(View button) {
    final Context context = getActivity().getApplicationContext();
    final Intent intent = new Intent(context, user.class);
    context.startActivity(intent);
}


    }

当我单击按钮时,我的应用程序仍然崩溃:S

日志猫:

04-30 20:18:50.520: E/AndroidRuntime(17203): 致命异常: main 04-30 20:18:50.520: E/AndroidRuntime(17203): android.util.AndroidRuntimeException: 从外部调用 startActivity()活动上下文需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?04-30 20:18:50.520: E/AndroidRuntime(17203): 在 android.app.ContextImpl.startActivity(ContextImpl.java:1095) 04-30 20:18:50.520: E/AndroidRuntime(17203): 在 android. content.ContextWrapper.startActivity(ContextWrapper.java:276) 04-30 20:18:50.520: E/AndroidRuntime(17203): 在 com.example.bloodneeded.FirstTabFragment.onlogin(FirstTabFragment.java:37) 04-30 20: 18:50.520: E/AndroidRuntime(17203): 在 com.example.bloodneeded.FirstTabFragment$1.onClick(FirstTabFragment.java:28) 04-30 20:18:50.520: E/AndroidRuntime(17203): 在 android.view。查看.执行点击(查看。

4

3 回答 3

2

当你在片段中时,你应该getActivity()而不是this 尝试这个

 intent.setClass(getActivity(), user.class); 

编辑: 也包括这个

  getActivity().startActivity(intent);
于 2013-04-30T16:31:14.687 回答
1

我认为您不明白“这个”的真正含义。setClass 有两个参数——上下文和类。如果在 Activity 中执行此操作,则指定“this”,因为 Activity 扩展了 Context(换句话说,Activity 是 Context)。Fragment 不是上下文,因此您会收到此错误。上下文也可以通过不同的方式获得。startActivity 方法也是一个 Context 方法。如果有意图,从构造函数中设置 ComponentName 的代码也更少。

public void onlogin(View button) {
    final Context context = getActvity();
    final Intent intent = new Intent(context, user.class);
    context.startActivity(intent);
}

不要用小写字母命名类。类名应以大写字母开头。这不是错误,而是约定。

关于getView方法

return (RelativeLayout) inflater.inflate(R.layout.main, container,false);

绝对没有必要将其转换为 Relativelayout。只需返回

return inflater.inflate(R.layout.main, container,false);

关于

if (container == null) {
    return null;
}

不知道是什么意思,但主要是

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    return inflater.inflate(R.layout.main, null);
}

一定很好

它也崩溃了,因为

public void onlogin(View button) {
    final Context context = getActvity();
    final Intent intent = new Intent(context, user.class);
    context.startActivity(intent);
}

必须在附加此视图的上下文中定义。

这意味着为了工作,它必须在 Activity 中定义,而不是在 Fragment 中。你有两种方法来解决这个问题 1)把这个方法放在你的活动中

2)如果你想在片段中定义它,你应该删除

android:onclick

从 xml,设置按钮 id

android:id="@+id/yourButtonId"

并直接在按钮上设置 onClickListener。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    final View v = inflater.inflate(R.layout.main, null);
    final View button = v.findViewById(R.id.yourButtonId);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onlogin(v);
        }
    });
    return v;
}
于 2013-04-30T16:42:06.677 回答
0

尝试intent.setClass(FirstTabFragment.this, user.class);

于 2013-04-30T16:32:51.777 回答