Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单击时为卡片视图使用片段时,活动意图不起作用_Java_Android_Android Intent_Fragment - Fatal编程技术网

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