我的第一个应用程序单独运行正常,但是现在我试图在教程之后添加选项卡,但遇到了麻烦。 我一直在搜索,许多用户遇到了同样的问题,我尝试了这些解决方案,但仍然无法正常工作。
我的应用
package es.ea1ddo.antenacubica;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
frecuencia = findViewById(R.id.frecuencia);
cal3el = (Button) findViewById(R.id.calcular3);
现在这是我要复制以前的应用的地方
package es.ea1ddo.calculadoraantenascubicas;
public class TabFragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View v= inflater.inflate(R.layout.tab_fragment_2, container, false);
frecuencia = EditText.findViewById(R.id.frecuencia);
cal3el = (Button) getView().findViewById(R.id.calcular3);
我一直在搜索,尝试了许多示例和不同的方式,但是我陷入了困境。
您可以看到我添加了getView()
。在每个findViewById
之前,但我仍然遇到相同的错误:
非静态方法findViewById(int)不能从T为类型变量的静态上下文中引用: T扩展了在方法findViewById(int)中声明的View
有什么建议吗? 谢谢
答案 0 :(得分:1)
替换
frecuencia = EditText.findViewById(R.id.frecuencia);
cal3el = (Button) getView().findViewById(R.id.calcular3);
使用
recuencia = (EditText) v.findViewById(R.id.frecuencia);
cal3el = (Button) v.findViewById(R.id.calcular3);
如果不起作用,请在您的问题中添加完整的xml代码
答案 1 :(得分:1)
在您的片段代码中,您有两个问题。
第一个,正如其他人指出的那样,View.findViewById()
是一种非静态方法,因此您将像myView.findViewById()
而不是EditText.findViewById()
那样调用它。
第二个涉及片段的getView()
方法的工作方式。此方法仅在 返回后才有效。onCreateView()
返回getView()
返回的值。这意味着您无法从onCreateView()
内部呼叫getView()
;它将始终返回onCreateView()
。
放在一起,您的代码应如下所示:
null
答案 2 :(得分:0)
替换
EditText.findViewById
使用
(ExitText) getView().findViewById
但是,这将导致NullPointerException。
您需要将所有使用getView()
的代码移至onViewCreated()
或引用v
。