【问题标题】:Error: no suitable constructor found for Intent(HospitalFragment,Class<hospital_1>)错误:没有找到合适的构造函数 Intent(HospitalFragment,Class<hospital_1>)
【发布时间】:2018-09-01 18:12:39
【问题描述】:

错误:没有找到适合 Intent(HospitalFragment,Class) 的构造函数

我想要 HospitalFragment 类 >>>(转到)>> 类 hospital_1:

enter image description here

公共类 HospitalFragment 扩展 Fragment {

公共医院片段(){ }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_hospital, container, false);

    ImageButton hh1 = (ImageButton) view.findViewById(R.id.hh1);
    hh1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent showpic = new Intent( HospitalFragment.this,hospital_1.class);
        }
    });

    ImageButton hh2 = (ImageButton) view.findViewById(R.id.hh2);
    hh2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent showpic = new Intent(HospitalFragment.this, hospital_2.class);
            startActivity(showpic);
        }
    });


    ImageButton hh3= (ImageButton) view.findViewById(R.id.h3);
    hh3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {goToURL("https://www.google.com");
        }
    });


    return view;
}


private void goToURL(String url) {
    Uri uriUrl = Uri.parse(url);
    Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
    startActivity(launchBrowser);
}

}

【问题讨论】:

  • 我知道这是一篇旧帖子,但对于任何未来的帖子——以及其他阅读本文的人——_请_不要将代码或错误消息作为屏幕截图发布。它很难阅读,贡献者很难复制和粘贴(例如,用于测试、修复代码),并且它会阻止代码被索引,从而使有相关问题的人很难找到。在这种情况下,我意识到(大部分?)代码至少在下面被复制为降价,但在大多数情况下,屏幕截图并没有增加太多价值。

标签: android


【解决方案1】:

Intent 构造函数的第一个参数必须是 Context,但您的 HospitalFragment不是 Context

你经常看到像MyClass.this这样的代码作为Intent构造函数的第一个参数的原因是Activitys Contexts。因此,如果您的点击监听器设置在 Activity 而不是 Fragment 中,您的代码就可以正常工作。

好消息是所有Views 都有一个getContext() 方法,并且所有点击监听器都会得到一个View 参数传递给他们。您可以从中检索上下文!

所以,替换这个:

ImageButton hh1 = (ImageButton) view.findViewById(R.id.hh1);
hh1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent showpic = new Intent( HospitalFragment.this,hospital_1.class);
    }
});

用这个:

ImageButton hh1 = (ImageButton) view.findViewById(R.id.hh1);
hh1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent showpic = new Intent(view.getContext(), hospital_1.class);
    }
});

并为您的其他听众做同样的事情。

【讨论】:

    【解决方案2】:

    而不是使用

    Intent showpic = new Intent(HospitalFragment.this, hospital_2.class);
    

    使用它来创建意图。

    Intent showpic = new Intent(v.getContext(), hospital_2.class);
    

    v 是由

    创建的视图
    View v = inflater.inflate(R.layout.fragment_hospital, container, false);
    

    我没有将它用作view,因为在您的onClick() 内部,还有一个名为viewViewHosipitalFragment.this 不是一个有效的上下文,它用红线显示

    【讨论】:

      猜你喜欢
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2016-08-15
      • 2015-11-14
      • 1970-01-01
      相关资源
      最近更新 更多