我正在使用fragment
来保存 4张卡片视图,点击后应该会启动新的活动。它可以显示我生成的toast
,表明点击功能可以正常工作,但无法激活意图。
我已经尝试为该活动使用多个名称,并且
Intent intent = new Intent (getActivity(), activity name.class)
开始活动的代码
package com.example.eb.ui.home;
import ...
public class HomeFragment extends Fragment implements View.OnClickListener{
private HomeViewModel homeViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class);
View root = inflater.inflate(R.layout.fragment_home, container, false);
final CardView java = root.findViewById(R.id.javacardId);
final CardView html = root.findViewById(R.id.htmlcardId);
final CardView c_prog = root.findViewById(R.id.C_cardId);
final CardView cpp = root.findViewById(R.id.cppcardId);
//set on click listener
java.setOnClickListener(this);
html.setOnClickListener(this);
cpp.setOnClickListener(this);
c_prog.setOnClickListener(this);
return root;
}
@Override
public void onClick(View v) {
Intent i;
switch(v.getId()){
case R.id.javacardId :
i = new Intent(this,html.class);
startActivity(i);
break;
case R.id.htmlcardId :
i = new Intent(this,html_prog.class);
startActivity(i);
break;
case R.id.cppcardId :
i = new Intent(this,cpp_prog.class);
startActivity(i);
break;
case R.id.C_cardId :
i = new Intent(this,c_prog.class);
startActivity(i);
break;
default: break;
}
}
}
---
我希望fragment
中的卡片视图会开启新活动
答案 0 :(得分:0)
尝试将“ this”关键字更改为getContext()
"i = new Intent(this,html.class);"
应该是
i = new Intent(getContext,html.class);
或在Fragment的onViewCreated()生命周期方法中初始化并设置clicklistener。
答案 1 :(得分:0)
对于诸如HtmlActivity之类的活动,应使用专有名称。它应该始终以大写字母开头
i = new Intent(getActivity(), HtmlActivity.class);
startActivity(i);
答案 2 :(得分:0)
对于如下所示的上下文,您必须在片段中使用getActivity()而不是“ this”。
@Override
public void onClick(View v) {
Intent i;
switch(v.getId()){
case R.id.javacardId :
i = new Intent(getActivity(),html.class);
startActivity(i);
break;
default: break;
}
答案 3 :(得分:0)
Intent
所需的第一个参数是Context
如Android文档(Here)中所述:
packageContext Context: A Context of the application package implementing this class.
因此,您需要通过getContext()
或getActivity()
(因为Activity
扩展了Context
),如下所示:
i = new Intent(getActivity(), html.class);
startActivity(i);
我尝试使用您的代码构建和启动应用(在进行了上述更改之后),并且运行良好。