从Fragment启动一个新的Activity

19

使用Android Studio,我有一个MainActivity类和一个占位符片段(Placeholder fragment)。这个片段有按钮,但其中一个按钮必须加载一个Activity。如何实现这一点?有人告诉我尝试以下方法,但新的Intent无法工作。

Button button = (Button) rootView.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
          Intent intent = new Intent(MainActivity.class, AnotherActivity.class);
          startActivity(intent);
        }
 });

请发布您当前的尝试/代码。这是一个广泛的问题,应该可以通过阅读Android官方文档来回答。http://developer.android.com/guide/components/fragments.html - Paul Thompson
7个回答

38
如果您查看文档,您会看到启动活动需要使用以下代码。
Intent intent = new Intent(getActivity(), AnotherActivity.class);
startActivity(intent);

目前您正在使用MainActivity.class在需要上下文对象的地方。如果目前位于活动中,只需传递this即可。碎片可以通过getActivity()函数获取活动。

您完整的代码应该像这样:

Button button = (Button) rootView.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(getActivity(), AnotherActivity.class);
        startActivity(intent);
    }
});

如果我在MainActivity中的PlaceHolder片段内部,那该怎么办?在那里是否有可能实现它?我已经尝试了很多方法,但都没有成功。 - Stephanie
在这种情况下,将 this 替换为 getActivity() - Paul Thompson
我的应用程序在按照上述步骤后崩溃了。 - Palak Jain
你好,我该如何从独立的片段启动活动?我的意思是它没有任何活动父级。 - Ninja

3

如果你需要在onBindViewHolder方法中使用它,你可以这样做:

@Override
public void onClick(View view) {
    Intent intent= new Intent(view.getContext(), MainActivity.class);
    view.getContext().startActivity(intent);
}

3

Fragment中启动Activity时,应使用getActivity()

从Fragment中:Context是父活动 (getActivity())

Intent intent = new Intent(getActivity(), AnotherActivity.class);
startActivity(intent);

你好,我该如何从独立的片段启动一个活动?我的意思是它没有任何活动父级。 - Ninja

1
Button button = (Button) view.findViewById(R.id.button_ID);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent myintent = new Intent(getActivity(), CallingActivity.class);
        startActivity(myintent);
    }
});

0
如果是在Fragment中,应该使用getActivity()获取活动上下文而不是显式地给出活动名称。 例如,如果你想从一个Fragment打开SecondActivity,
Intent intent = new Intent(getActivity(), SecondActivity.xml); startActivity(intent);

0
如果它在占位符中:
holder.itemView.setOnClickListener {
       val intent = Intent(context, AnotherActivity::class.java)
       intent.putExtra("text", "From fragment") . // send data
       context.startActivity(intent)
}

AnotherActivity中:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_another.*


class AnotherActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_another)
    }

    public override fun onStart() {
        super.onStart()
        textView.text = "Received text:" + intent.getStringExtra("text")!!
    }
}

0

对于片段,您必须使用getactivity()...例如:

Intent intent = new Intent(getActivity(), AnotherActivity.class);
startActivity(intent);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接