Android 访问ListView的项值时出现NullPointerException
侦听器代码:Android 访问ListView的项值时出现NullPointerException,android,android-listview,Android,Android Listview,侦听器代码: lvSearch.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { LinearLayout ll = (LinearLayout) adapter.getChildAt(
lvSearch.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View view, int position,
long id) {
LinearLayout ll = (LinearLayout) adapter.getChildAt(position);
TextView tx = (TextView) ll.getChildAt(0);
TextView tx1 = (TextView) ll.getChildAt(1);
Log.i("abcValues", tx.getText().toString());
lvSearch.setOnItemClickListener(新的OnItemClickListener(){
公共控件单击(适配器视图适配器、视图视图、int位置、,
长id){
LinearLayout ll=(LinearLayout)适配器.getChildAt(位置);
TextView tx=(TextView)ll.getChildAt(0);
TextView tx1=(TextView)ll.getChildAt(1);
Log.i(“abcValues”,tx.getText().toString());
在访问
列表视图的项目值时,我得到了一个NullPointerException
。它可以很好地启动项目值,但不能用于滚动后出现的项目。getChildAt
返回可见行,滚动LisView
并单击要调用方法的行tChildAt
用于无效位置(可与getChildAt
方法一起使用的最大数目是可见行数-1)。如果要从单击行的布局中获取父级,只需在代码中使用第二个参数arg1
:
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
LinearLayout ll = (LinearLayout) arg1;
TextView tx = (TextView) ll.getChildAt(0);
TextView tx1 = (TextView) ll.getChildAt(1);
Log.i("abcValues", tx.getText().toString());
public void onItemClick(适配器视图arg0、视图arg1、内部arg2、,
长arg3){
LinearLayout ll=(LinearLayout)arg1;
TextView tx=(TextView)ll.getChildAt(0);
TextView tx1=(TextView)ll.getChildAt(1);
Log.i(“abcValues”,tx.getText().toString());
我认为您不能这样做。请尝试从传入的视图中以您的方式进行备份:
LinearLayout row = (LinearLayout) arg1.getParent();
TextView tx = (TextView) row.findViewById(R.id.tx_id_here);
TextView tx1 = (TextView) row.findViewById(R.id.tx1_id_here);
您是否正在使用适配器填充列表视图?如果是这样,您应该尝试从此处处理单击,请在从getView()方法返回该行之前,在该行上设置ClickListener。每次单击某个项目时调用findViewById()将导致性能稍差。同时更改“argo0”然后添加日志语句,这些语句将向您显示要传递给onItemClick()的值@kamil At what what what what what what what what what what what
get the child values
?arg1
是您单击的行中的视图。然后您可以使用ll.getChildAt
访问子TextView
,就像上面的代码一样,或者您可以通过id:ll.findViewById(R.id.TextView\u id)找到它
。然后你可以随心所欲地使用它。达尼特,当我开始回答并不得不接听电话时,请告诉我。+1你不能在arg1
上调用getParent()
,因为这将在你尝试转换列表视图时引发异常(如果我没记错的话)到线性布局
。我如何在单独的按钮上访问列表视图项目而不是在项目单击侦听器上。@kamil如果不这样做,那就没有意义。当您在布局中单击按钮
时,您将引用哪个列表项目(我假设按钮
不在列表行布局中)你应该问另一个问题。