Начать новую активность из фрагмента
Используя 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);