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如果不这样做,那就没有意义。当您在布局中单击
按钮
时,您将引用哪个列表项目(我假设
按钮
不在列表行布局中)你应该问另一个问题。