【问题标题】:lazylist adapter issue while scrolling滚动时的惰性列表适配器问题
【发布时间】:2014-05-13 18:15:54
【问题描述】:
public View getView(int position, View convertView, ViewGroup parent) {         
    ViewHolder viewHolder = null;
    View vi= convertView;

    if(convertView==null){
        viewHolder = new ViewHolder();
        vi = inflater.inflate(R.layout.list_row, null);
        viewHolder.content = (TextView)vi.findViewById(R.id.f_content);
        viewHolder.cat_id  = (TextView)vi.findViewById(R.id.c_id);
        viewHolder.fact_id = (TextView)vi.findViewById(R.id.f_id);
        vi.setTag(viewHolder); 
    }else{
        viewHolder = (ViewHolder) convertView.getTag();
    }   

    HashMap<String, String> fact = new HashMap<String, String>();
    fact = data.get(position);

    // Setting all values in listview
    viewHolder.fact_id.setText(fact.get("_id"));
    viewHolder.cat_id.setText(fact.get("cat_id"));
    viewHolder.content.setText(fact.get("fact_content"));

    return vi;
}

我创建了一个 LazyAdapter,它扩展了一个 BaseAdaper 以与 ListView 一起使用。

此适配器在 ListView 中填充数据。当我单击前 4 个可见列表项时,它会打印该项目的值。 问题是当我向下滚动列表视图并单击第 5 项时。应用程序崩溃说空指针异常。日志跟踪在这里供参考。

05-13 23:10:43.943:E/AndroidRuntime(3360):致命异常:主要 05-13 23:10:43.943: E/AndroidRuntime(3360): java.lang.NullPointerException 05-13 23:10:43.943: E/AndroidRuntime(3360): at com.example.facts.MainActivity$3.onItemClick(MainActivity.java:100) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.widget.AdapterView.performItemClick(AdapterView.java:284) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.widget.ListView.performItemClick(ListView.java:3569) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:1831) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.os.Handler.handleCallback(Handler.java:587) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.os.Handler.dispatchMessage(Handler.java:92) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.os.Looper.loop(Looper.java:150) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.app.ActivityThread.main(ActivityThread.java:4389) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 java.lang.reflect.Method.invokeNative(Native Method) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 java.lang.reflect.Method.invoke(Method.java:507) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 05-13 23:10:43.943: E/AndroidRuntime(3360): at dalvik.system.NativeStart.main(Native Method)

Onclick 方法是这样的:

// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {

    RelativeLayout node = (RelativeLayout)parent.getChildAt(position);
    TextView fact = (TextView) node.findViewById(R.id.c_id);
    Log.d("ListItem Clicked", "id: " + id + " position: "
        + position + " artist " + fact.getText());
}
});

【问题讨论】:

  • 您需要向我们展示onItemClick 方法,这就是错误所在。
  • @ashishduh 我已经编辑了这个问题。在列表中包含 onclick 方法。

标签: java android eclipse listview listadapter


【解决方案1】:

我的建议是重新审视您的 onItemClickListener 实施。

您根本不需要访问 parent 来执行您正在尝试做的事情。试试这个。

list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {

        TextView fact = (TextView) view.findViewById(R.id.c_id);
        Log.d("ListItem Clicked", "id: " + id + " position: "
        + position + " artist " + fact.getText());
    }
});

方法中提供的视图参数实际上是被点击的视图。

查看; AdapterView 中被点击的视图(这将是适配器提供的视图)

详情请咨询AdapterView.OnItemClickListener

家长可以帮助您确定正在处理的AdapterView。例如,假设您有两个 ListAdapter 但只想使用一个侦听器,那么它将帮助您指定哪个是侦听器。

【讨论】:

  • 在这种情况下,@ZeeshanAli 请接受我的回答。接受答案会让人们知道问题已经解决。如果有人偶然发现同样的问题,他们可能会在这里找到这个问题。然后他们就知道下一步该做什么了。
  • 我希望我能。我还没有太多的名声来接受答案
  • 我明白了,那没问题。到时候别忘了回来。 :)
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
相关资源
最近更新 更多