简体   繁体   English

Android findViewById在Eclipse生成的项目中返回Null

[英]Android findViewById is returning Null in Eclipse generated project

I created a new Android project in Eclipse with one Blank Activity. 我在Eclipse中使用一个Blank Activity创建了一个新的Android项目。 In the fragment, I added a TextView called textHello. 在该片段中,我添加了一个名为textHello的TextView。 All I want to do for this test is to modify textHello's text value. 我为此测试要做的只是修改textHello的文本值。 But I'm my findViewById is giving me null. 但是我是我的findViewById给我null。

Here is the fragment code: 这是片段代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.gcuitest.MainActivity$PlaceholderFragment" >
    <TextView
        android:id="@+id/textHello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
</RelativeLayout>

Here is the MainActivity.java 这是MainActivity.java

package com.example.gcuitest;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.os.Build;

public class MainActivity extends Activity {
    private TextView helloText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
            //getFragmentManager().beginTransaction()
            //      .add(R.id.container, new PlaceholderFragment()).commit();
            FragmentManager fragmentManager = getFragmentManager(); 
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.add(R.id.container, new PlaceholderFragment());
            fragmentTransaction.commit();
        }

        helloText = (TextView) findViewById(R.id.textHello);
        helloText.setText("Gerard");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            return rootView;
        }
    }

}

Why is findViewById giving me null? 为什么findViewById给我null? Is it in the right place? 在正确的地方吗? I've looked at other code samples, and they place findViewById in onCreate, after setContentView, which is what this does. 我看过其他代码示例,并将它们放置在setContentView之后的onCreate中的findViewById上,这是这样做的。 What did I miss? 我错过了什么? Thanks. 谢谢。

Why is findViewById giving me null? 为什么findViewById给我null?

Because textHello TextView is inside PlaceholderFragment layout instead of Activity which is activity_main . 因为textHello TextView在PlaceholderFragment布局内部,而不是Activity,即activity_main

if you want to access TextView from Fragment layout then use onCreateView as : 如果要从Fragment布局访问TextView,请使用onCreateView作为:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_layout, container, false);
    helloText = (TextView)view. findViewById(R.id.textHello);
    helloText.setText("Gerard");

    return view;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM