单击时使用片段进行卡视图时,Intent-to-activity不起作用



我正在使用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中的卡视图打开新的活动

尝试将"this"关键字更改为getContext((

"i = new Intent(this,html.class);"

应该是

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文档中所述(此处(:

packageContext  Context: A Context of the application package implementing this class.

因此,您需要按如下方式传递getContext()getActivity()(因为Activity扩展了Context(:

i = new Intent(getActivity(), html.class);
startActivity(i);

我试着用你的代码构建并启动了一个应用程序(在进行了上述更改后(,效果很好。

最新更新