“findViewById”无法在ViewPagerIndicator Fragment中运行

时间:2013-04-11 06:50:42

标签: android android-fragments viewpagerindicator findviewbyid

您好我已经设法将我的XML文件绑定到ViewPagerIndicator,将它们扩展为Fragments但我无法使用必要的findViewById代码将我的按钮引用到代码中。这是我的代码,因为有人可以提供帮助

    package com.example.sliding;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class twoey extends Fragment {

    Button lol;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.two, null);
        return v;

        lol = (Button) findViewById (R.id.button1);

    }
}

但是我尝试做什么我无法得到 findViewById 这个词的小红色线可以有人帮忙吗?

3 个答案:

答案 0 :(得分:3)

您的代码有2个错误:

  1. return v;必须是方法的最后一行,之后的任何行都无法运行! 无法访问,因此存在编译错误!

  2. lol = (Button) findViewById (R.id.button1);需要lol = (Button) v.findViewById (R.id.button1);,否则您将NullPointerException,因为button1View v的一部分,而不是活性。

  3. 正确的代码是:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.two, null);
    
        lol = (Button) v.findViewById (R.id.button1);
        return v;
    }
    

答案 1 :(得分:0)

Java编译器根本无法访问return语句后编写的代码。 return表示你已经完成了这个方法,并且你从中返回了一个值,所以在那之后执行某些东西是没有意义的。因此,您需要在lol = (Button) findViewById (R.id.button1)调用之前简单地移动lol = (Button) v.findViewById (R.id.button1)(事实上应该将其称为v,因为return v是您的根视图),并且代码将正确编译。希望这会有所帮助。

答案 2 :(得分:0)

覆盖onViewCreated()。像这样:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
    lol = (Button) getView().findViewById (R.id.button1);

    .... // ANY OTHER CASTS YOU NEED TO USE IN THE FRAGMENT
}