0

这里是初学者的android程序员,

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

<?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 到findviewbyidCheckedTextView,因为它包含我需要使用的复选框,但它给了我一个空指针异常。

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但我不确定如何...任何帮助将不胜感激,谢谢。

4

3 回答 3

1

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

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

我建议您查看文档:http: //developer.android.com/guide/topics/ui/layout/listview.html

于 2013-10-04T14:13:30.307 回答
0

在找到视图之前,您首先需要扩展行布局的布局。尝试类似的东西

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

在没有 ID 为 R.id.checkedTextView 的视图实例之前,您的代码无法正常工作。

于 2013-10-04T14:01:03.243 回答
0

您需要为新视图充气

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

然后你可以看到

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

这样就可以了。

于 2013-10-04T14:03:22.913 回答