设置内容视图和清理项目后,FindViewByID(...)返回null

时间:2013-01-11 04:08:35

标签: android layout

有很多这样的问题,但解决方案对我没用。

无论如何,我的主要活动有一个按钮,在其onclick方法中,将我带到另一个活动ViewPowerActivity。我有一个名为power_view.xml的布局xml文件。在里面,我有一些布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/screen_margin"
android:layout_marginRight="@dimen/screen_margin"
android:layout_marginTop="@dimen/screen_margin"
android:orientation="vertical" >
...

ViewPowerActivity具有基本的onCreateMethod:

public class ViewPowerActivity extends Activity {
    private final static Powers powers=new StubPowers();

    @Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.power_view);

        Power power=powers.getPowers().get(0);
        View powerView = findViewById(R.layout.power_view);
        ...
    }
    ...
}

上面的findViewById调用返回null。

如果我在setContentView(...)之后删除所有代码并简单地返回那里,它就会显示空布局。我已经setContentView,我已经清理了项目,我已经尝试将power视图设置为主要活动,以及各种各样的事情。还有什么呢?

2 个答案:

答案 0 :(得分:1)

从您的代码中可以清楚地知道 power_view 是一种布局即。 XML。所以R.id.power_view不正确。

您似乎想要访问该布局的父视图。然后执行以下操作。

您必须将id设置为父LinearLayout。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/parentLinear"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginLeft="@dimen/screen_margin"
     android:layout_marginRight="@dimen/screen_margin"
     android:layout_marginTop="@dimen/screen_margin"
     android:orientation="vertical" >
     ...

然后,

     View powerView = findViewById(R.id.parentLinear);

如果您想在powerView中使用其他视图,则应在xml布局中将该ID设置为该视图,并通过 findViewById(R.id.your_view)

答案 1 :(得分:0)

     power_view.xml


    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="@dimen/screen_margin"
    android:layout_marginRight="@dimen/screen_margin"
    android:layout_marginTop="@dimen/screen_margin"
    android:orientation="vertical" >



    public class ViewPowerActivity extends Activity {
        private final static Powers powers=new StubPowers();

        @Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.power_view);

            Power power=powers.getPowers().get(0);
            View powerView = (ViewGroup)findViewById(R.id.layout);
            ...
        }
        ...
    }