onClick: 找不到方法
onClick: 找不到方法
我对Android Studio非常陌生。我想要的很简单:我按下一个按钮,然后应该发生某些事情。
所以,在我的片段中,我有一个在XML中如下所示的按钮:
我的GeneralFragment.java代码如下:
package ch.yourclick.kitt.fragments; import android.os.Bundle; import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import ch.yourclick.kitt.R; /** * 一个简单的{@link Fragment}子类。 * 使用{@link GeneralFragment#newInstance}工厂方法 * 创建此片段的实例。 */ public class GeneralFragment extends Fragment { public GeneralFragment() { // 必需的空公共构造方法 } /** * 使用提供的参数创建此片段的新实例。 * * @return GeneralFragment的新实例。 */ // TODO: 重命名和更改参数的类型和数量 public static GeneralFragment newInstance() { GeneralFragment fragment = new GeneralFragment(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 膨胀此片段的布局 return inflater.inflate(R.layout.fragment_general, container, false); } public void doSumth() { System.out.println("Hello"); } }
我的问题是我遇到了错误:
java.lang.IllegalStateException: 在androidx.appcompat.widget.App的父级或祖先上找不到方法doSumth(View),该方法在android:onClick属性中定义为视图类
我做错了什么?
问题出现的原因是没有正确添加一个View参数到函数中。解决方法可以有两种:
1. 在函数中添加View参数,例如:
public void doSumth(View view) { System.out.println("Hello"); }
2. 在代码中使用以下方式实现:
public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button bt1 = (Button) findViewById(R.id.b1); bt1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { System.out.println("Hello"); } }); } }
如果点击按钮后仍然出现相同的错误,可能是XML文件中的函数名写错了。可以检查XML文件中的onClick
参数是否正确。另外,也可以尝试使用第二种方法,即在编辑中添加的选项。
原文作者尝试了第二种方法,但是出现了错误:Cannot resolve method 'setContentView' in 'GeneralFragment'。后来作者尝试将代码放在onCreateView()
中而不是onCreate()
中,问题得到解决。