我的程序和列表视图出现问题。 我有一个简单的列表视图,上面有2个项目
Joe Bloggs
大卫琼斯
我正在尝试将第一个元素的背景颜色设置为绿色,但是当我使用
时,我不断收到空指针异常namesList.getChildAt(0).setBackgroundColor(Color.GREEN);
也
namesList.getChildCount();
即使列表中有2个项目,也始终返回0。
我真的不明白为什么这不起作用,是否有一些我失踪的步骤。
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class LecturerLogsView extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lecturer_logs_view);
ListView namesList = (ListView)findViewById(R.id.namesList);
String names[]={"Joe Bloggs", "David Jones"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this, android.R.layout.simple_list_item_1,
names);
namesList.setAdapter(adapter);
namesList.getChildAt(0).setBackgroundColor(Color.GREEN);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.lecturer_logs_view, menu);
return true;
}
}
xml文件
<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=".LecturerLogsView" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<ListView
android:id="@+id/namesList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1" >
</ListView>
</RelativeLayout>
答案 0 :(得分:0)
这就是我想要的:
public class LecturerLogsView extends Activity {
ArrayList<String> listItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listItems = new ArrayList<String>();
listItems.add("Joe Bloggs \n");
listItems.add("David Jones \n");
setContentView(R.layout.activity_lecturer_logs_view);
(ListView) getView().findViewById(R.id.namesList)
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1,
listItems);
namesList.setAdapter(adapter);
namesList.getChildAt(0).setBackgroundColor(Color.GREEN);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.lecturer_logs_view, menu);
return true;
}
}
记得导入ArrayList。
答案 1 :(得分:0)
setAdapter
是异步调用。在你调用它之后,它需要一些时间来执行,这就是为什么在分配它之后你得到的值与“无数据”状态一致。
您需要修改适配器 getView ,这是ListView
每次需要视图时调用的函数。您需要了解它,这是了解Android小部件如何真正起作用的关键。
在您的示例中,这样做:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, listItems) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=super.getView(position, convertView, parent); // we get the original view
if (position==0) view.setBackgroundColor(Color.GREEN); // and change color if position==0
return view;
}
};
...但我再次建议您仔细阅读这些内容是如何工作的,找一个关于适配器的好教程!