【问题标题】:Android ListView returning null onItemClick using baseAdapterAndroid ListView 使用 baseAdapter 返回 null onItemClick
【发布时间】:2013-10-05 03:06:08
【问题描述】:

我使用 baseadapter 创建了一个 listView..我正在使用来自 API 的 JSON 数据加载 ListView 我想获取我单击的列表项的值并将其发送回数据..但它一直返回 null ...

这是 BaseAdapter 类

import java.util.ArrayList;
import java.util.HashMap;

import com.nairation.library.ImageLoader;

import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class SectionListAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater = null;
    public Typeface rf;
    private Context context;

    public SectionListAdapter(Activity a, ArrayList<HashMap<String, String>> d, Context c){
        activity = a;
        data = d;
        context = c;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder;
        if(convertView == null){
            convertView = inflater.inflate(R.layout.section_list_row, null);
            holder = new ViewHolder();
            holder.topic_name = (TextView) convertView.findViewById(R.id.section_topic_title);
            holder.topic_time = (TextView) convertView.findViewById(R.id.timerelative);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

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

        holder.topic_name.setText(tpl.get(SectionList.TITLE));
        holder.topic_time.setText(tpl.get(SectionList.TIME));
        return convertView;
    }

    static class ViewHolder{
        TextView topic_name;
        TextView topic_time;
            public String toString() {
            return "name=" + topic_name;
    }
    }
}

这是我用来测试它是否可以工作的 onItemClick 监听器

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO Auto-generated method stub
    Object th = list.getItemAtPosition(position);
    ViewHolder tpi = (ViewHolder) th;
    Toast.makeText(getApplicationContext(), ""+tpi, Toast.LENGTH_SHORT).show();
}

大家帮忙

【问题讨论】:

  • 哪一行返回null?你到底想展示什么?
  • 我正在尝试返回我单击的特定列表项的文本...toast 中的“tpi”变量给了我空值

标签: java android adapter baseadapter


【解决方案1】:

我认为您的问题是您没有在适配器中实现getItem。应该是

@Override
public Object getItem(int arg0) {
    return data.get(arg0);
}

此外,getItemAtPosition 将返回您在ArrayList 中的一项,即HashMap&lt;String, String&gt;。所以这条线应该是

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    HashMap<String, String> item = (HashMap<String, String>) list.getItemAtPosition(position);
    Toast.makeText(getApplicationContext(), item.get(SectionList.TITLE), Toast.LENGTH_SHORT).show();
}

【讨论】:

  • 是的,我只是尝试将我的代码更改为您在上面的代码..我的应用程序崩溃了,我从 logcat 中得到一个错误,即 HashMap 无法转换为 viewHolder...
  • 关键是getItem函数。
【解决方案2】:

您可以改用名为 SimpleAdapter 的内置 Android 适配器:

         SimpleAdapter(Context context,List<HashMap<String,String>>,int resourceId,String from,int to) 

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 2012-06-22
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多