Начать новую активность из фрагмента

Используя Android Studio, у меня есть класс MainActiviy с фрагментом Placeholder. Этот фрагмент имеет кнопки, но нужно загрузить 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);
        }
 });

Ответ 1

Если вы посмотрите документацию, вы можете увидеть, что для запуска активности вы захотите использовать следующий код

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

Ответ 2

Вы должны использовать getActivity() для запуска Activity из Fragment.

Из фрагмента: Context является родительской активностью (getActivity()).

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

Ответ 3

Если вам нужно использовать его внутри onBindViewHolder, вы можете сделать это:

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

Ответ 4

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

Ответ 5

В случае фрагмента напишите getActivity(), чтобы получить контекст действия вместо того, чтобы явно указывать имя действия. Например, если вы хотите открыть SecondActivity из фрагмента,

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

Ответ 6

Если он в держателе:

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")!!
    }
}

Ответ 7

Для фрагмента вы должны использовать getactivity().... Например:

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