Java 单击时为卡片视图使用片段时,活动意图不起作用
我正在使用一个Java 单击时为卡片视图使用片段时,活动意图不起作用,java,android,android-intent,fragment,Java,Android,Android Intent,Fragment,我正在使用一个片段来保存4张卡片视图,点击后应该会启动一个新的活动。它可以显示我生成的toastI,显示单击功能正在工作,但无法激活意图 我试过用几个名字来命名这个活动,而且 Intent intent = new Intent (getActivity(), activity name.class) 启动活动的代码 package com.example.eb.ui.home; import ... public class HomeFragment extends Fragment imp
片段
来保存4张卡片视图,点击后应该会启动一个新的活动。它可以显示我生成的toast
I,显示单击功能正在工作,但无法激活意图
我试过用几个名字来命名这个活动,而且
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;
}
}
}
---
我希望片段中的卡片视图能够打开新的活动尝试将“this”关键字更改为getContext()
应该是
i = new Intent(getContext,html.class);
或者在Fragment的onViewCreated()生命周期方法中初始化并设置clicklistener 对于下面这样的上下文,必须在片段中使用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;
}
Intent
所需的第一个参数是Context
正如Android文档()中提到的:
因此,您需要传递getContext()
或getActivity()
(因为Activity
扩展了Context
),如下所示:
i = new Intent(getActivity(), html.class);
startActivity(i);
我试着用你的代码构建和启动一个应用程序(在做了上面的更改之后),效果很好 尝试在Fragment的onViewCreated生命周期方法中初始化并设置clicklistener。问题可能出在其他地方(在未发布的代码中)。这个解决方案在技术上应该是可行的。
packageContext Context: A Context of the application package implementing this class.
i = new Intent(getActivity(), html.class);
startActivity(i);