Android查找不在当前视图中的视图

时间:2013-10-04 13:58:15

标签: android

初学者android程序员,

在我的主要活动课程中,我已将内容视图设为Home_Screen。在这个Home_Screen xml文件中 - 我有一个ListView。为了描述这个列表视图的行,我创建了另一个名为row_layout的自定义xml文件,如下所示:

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

    <ImageView
        android:id="@+id/icon"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:gravity="left|center_vertical"
        android:layout_alignParentLeft="true"
        android:src="@drawable/ic_launcher" >
    </ImageView>

    <CheckedTextView
        android:id="@+id/checkedTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:layout_toRightOf="@+id/icon"
        android:minHeight="?android:attr/listPreferredItemHeight"
        android:paddingLeft="6dip"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:clickable="true"
        android:focusable="true"
        android:textColor="@color/darkish_blue" >
    </CheckedTextView>

</RelativeLayout>

问题是,我需要android到findviewbyid CheckedTextView,因为它包含我需要使用的复选框,但它给了我一个nullpointer异常。

CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.checkedTextView);
chkBox.setOnClickListener(new View.OnClickListener() {//<===== null pointer here!!
            public void onClick(View v)
            {
                ((CheckedTextView) v).toggle();
            }
        });

我在想我可以将row_layout文件合并到home_screen的列表视图中,但是我不确定如何... 任何帮助将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:1)

您需要使用适配器来驱动列表中的内容,这可能是内置于Android中的内容,或者您​​可以创建自己的内容。通常,如果您使用除游标之外的任何自定义视图作为数据源,那么最好编写自己的适配器(继承BaseAdapter是一个好的开始)。

在适配器中有getView()方法,它为列表中的每个项创建视图,使用像@bclymer这样的人发布将允许您实现自定义视图和处理事件等。

我建议您查看文档:{​​{3}}

答案 1 :(得分:0)

在找到视图之前,首先需要对行布局的布局进行膨胀。尝试像

这样的东西
View view = getLayoutInflator().inflate(R.layout.row_layout, null);
ChecedkTextView chkBox = (CheckeTextView) view.findViewById(R.id.checkedTextView);

在没有ID为R.id.checkedTextView的视图实例之前,您的代码无效。

答案 2 :(得分:0)

您需要为新视图充气

   LayoutInflater myInflater = LayoutInflater.from(yourcontext);
   RelativeLayout TheLayout = (RelativeLayout) myInflater.inflate(R.layout.row_layout, null);

然后你可以得到视图

 CheckedTextView chkBox = (CheckedTextView) TheLayout.findViewById(R.id.checkedTextView);

那就行了。