从Fragment开始一个新的Activity

时间:2015-02-19 23:36:06

标签: android android-activity

使用Android Studio,我的MainActiviy类带有占位符片段。这个片段有按钮,但必须加载一个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);
        }
 });

7 个答案:

答案 0 :(得分:21)

如果查看documentation,您可以看到要开始活动,您将要使用以下代码

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);
    }
});

答案 1 :(得分:2)

您应该使用getActivity()Activity发起Fragment

来自片段: Context是父活动(getActivity())

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

答案 2 :(得分: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);
    }
});

答案 3 :(得分:1)

如果必须在 onBindViewHolder 中使用它,可以执行以下操作:

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

答案 4 :(得分:0)

对于片段,编写getActivity()以获得活动上下文,而不是显式给出活动名称。 例如,如果您要从片段中打开SecondActivity,

Intent intent = new Intent(getActivity(),SecondActivity.xml); StartActivity(i);

答案 5 :(得分: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")!!
    }
}

答案 6 :(得分:0)

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

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