Ответ 1
Вы должны сделать это с помощью getActivity().startActivity(myIntent)
У меня есть набор вкладок внутри FragmentActivity
, каждый из которых имеет собственный фрагмент. Когда я попытался запустить новую активность из этого фрагмента с помощью onClickListener
и используя метод startActivity(myIntent)
, моя сила приложения закрывается.
Оглядев какое-то время, я нашел ссылку или два на метод под названием startActivityFromFragment
, но после поиска около часа или около того я не могу найти никаких объяснений или примеров того, как его использовать, или это это то, что я должен использовать.
Я предполагаю, что я спрашиваю, есть ли разница между запуском нового действия из активности и запуском нового действия из фрагмента, и если да, то что мне нужно реализовать?
Вы должны сделать это с помощью getActivity().startActivity(myIntent)
Я сделал это, ниже кода работает для меня....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.hello_world, container, false);
Button newPage = (Button)v.findViewById(R.id.click);
newPage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), HomeActivity.class);
startActivity(intent);
}
});
return v;
}
и убедитесь, что ваша целевая деятельность должна быть зарегистрирована в файле Manifest.xml,
но в моем случае все вкладки не отображаются в HomeActivity, любое решение для этого?
Я делаю это так, чтобы запустить SendFreeTextActivity из (пользовательского) фрагмента меню, который появляется в нескольких действиях:
В классе MenuFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_menu, container, false);
final Button sendFreeTextButton = (Button) view.findViewById(R.id.sendFreeTextButton);
sendFreeTextButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d(TAG, "sendFreeTextButton clicked");
Intent intent = new Intent(getActivity(), SendFreeTextActivity.class);
MenuFragment.this.startActivity(intent);
}
});
...
Разница между запуском Activity from the Fragment и Activity - это то, как вы получаете контекст, потому что в обоих случаях он должен быть активным.
Из действия:
Контекст - текущая деятельность (this
)
Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);
Из фрагмента:
Контекстом является родительская активность (getActivity()
). Обратите внимание, что сам фрагмент может начать работу с помощью startActivity()
, это необязательно делать из активности.
Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);
Используйте базовый контекст Activity, в котором находится ваш фрагмент, чтобы начать Intent.
Intent j = new Intent(fBaseCtx, NewactivityName.class);
startActivity(j);
где fBaseCtx
- BaseContext
вашей текущей активности.
Вы можете получить его как fBaseCtx = getBaseContext();