在点击时使用片段查看名片时,活动意图不起作用

时间:2019-11-02 07:15:47

标签: java android android-intent fragment

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

4 个答案:

答案 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);

我尝试使用您的代码构建和启动应用(在进行了上述更改之后),并且运行良好。