无法访问listview中的textview

时间:2014-06-11 16:27:07

标签: java android listview android-fragments android-listview

我正在使用Eclipse开发Android应用程序。

我有一个包含listview的片段。我想更改位于listview的一行内的一个Textview的文本。

public class FragmentShowList extends Fragment {

public FragmentShowList() {
}

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

    ListView lv = (ListView) rootView.findViewById(R.id.lv_show);

    DBAdapter helper = new DBAdapter(getActivity());
    String tableName = Tables.TABLENAME_CATEGORIES_MAIN;
    Tables table = new Tables(tableName);

    Cursor cursor = helper.getCursor(tableName);

    int[] to = new int[] {R.id.row_category_color, R.id.row_category_name};

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), R.layout.row_category, cursor, 
            table.getColumns(), to, 0);
    lv.setAdapter(adapter);

    View view = lv.getChildAt(0);
    //TextView tv = (TextView) view.findViewById(R.id.row_category_name);
    //tv.setText("haha");

    return rootView;

}}

我能够创建和查看列表,但是当我尝试运行带有" //"的最后两行时由于"空指针异常"

,应用程序崩溃

并且行的xml文件是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp" >

<TextView
    android:id="@+id/row_category_color"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:background="@drawable/rectangle"
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
    android:id="@+id/row_category_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp" 
    android:layout_alignTop="@+id/row_category_color"
    android:layout_toRightOf="@+id/row_category_color"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />

我似乎无法访问列表视图的子项,但我不知道原因。有什么想法吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

您需要子类CursorAdaptor并为getView(...)提供自定义实现。

您的自定义适配器的

getView(...)是更改单个列表项的位置。

http://developer.android.com/reference/android/widget/CursorAdapter.html

答案 1 :(得分:1)

您获得的空指针是因为可从getChildAt()访问的列表视图元素的范围从列表视图中的第一个可见项到当前显示在屏幕中的最后一个可见项。如果您尝试在getView()方法中记录位置变量,您将清楚地看到没有为您的所有项目调用它。滚动时,firstVisible项也会发生变化,lastvisible项也会发生变化。在滚动时,再次调用getView()。有关详细信息,请参阅[此答案]。1