FindViewById返回null(ProgressBar)

时间:2013-04-02 19:04:25

标签: android android-layout android-progressbar findviewbyid

我在StackOverflow上搜索了很多,并且在几条评论中建议清理项目来解决这个问题,问题出现在适配器的asynctask类中,所以:

  1. 从eclipse,目录(gen / bin)中删除项目并再次导入
  2. 我删除了导入,清理了项目,ctrl + O(再次导入)并再次编译项目
  3. 没用!

    我收到此错误的部分代码:

    protected void onPreExecute() {
    
            ImageView img = (ImageView) mView.findViewById(R.id.grid_action_button);
    
            if(img == null){
                Log.d(TAG, "img null");
            }else{
                Log.d(TAG, "img not null");
            }
    
            ProgressBar pBar = (ProgressBar) mView.findViewById(R.id.grid_progress_bar);
    
            if(pBar == null){
                Log.d(TAG, "pBar null");
            }else{
                Log.d(TAG, "pBar not null");
            }
    
        }
    

    最有趣的是,imageview正常工作,但pBar变量的返回为空。

    Logcat结果:

    04-02 15:46:00.734: D/Adapter(10842): img not null
    04-02 15:46:00.734: D/Adapter(10842): pBar null
    

    我的适配器到griview布局(mobile.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="30dp" >
    
        <ImageView
            android:id="@+id/grid_item_image"
            android:layout_width="140dp"
            android:layout_height="186dp"
            android:layout_marginRight="20dp"
            android:src="@drawable/ic_launcher" >
        </ImageView>
    
        <LinearLayout 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:orientation="vertical"
            >
            <!-- I have some TextViews here -->
    
        <ImageView
                android:id="@+id/grid_action_button"
                android:layout_width="100dp"
                android:layout_height="50dp"
                android:layout_marginTop="10dp"
                android:src="@drawable/btn_download"
                android:clickable="true" >
                </ImageView>
    
        <ProgressBar             
            android:id="@+id/grid_progress_bar"
            android:layout_width="100dp"
            android:layout_height="10dp"
            style="style/Widget.ProgressBar.Horizontal"
        />
    
    </LinearLayout>
    </LinearLayout>
    

    在主类中调用setContentView

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gridView = (GridView) findViewById(R.id.gridview);
    }
    

    我的getview()内部适配器类:

    public View getView(int position, View convertView, ViewGroup parent) {
    
        View gridView = convertView;
    
        if (gridView == null) {
    
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            // get layout from mobile.xml
            gridView = inflater.inflate(R.layout.mobile, null);
    
                ... more ...
    

    由于

1 个答案:

答案 0 :(得分:0)

也许这对某人有用。
从Firebase中获取数据后,我处于某种异步方法中,必须访问主屏幕上的进度栏。但是findViewById始终返回null。

最后,我像这样解决了它:

    AppCompatActivity mainActivity = (AppCompatActivity)context;
    mainActivity.setContentView(R.layout.activity_main);
    ProgressBar loadPollsProgressBar = (ProgressBar) mainActivity.findViewById(R.id.loadPollsProgressBar);