Android ListView使用baseAdapter返回null onItemClick
我使用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> data; private static LayoutInflater inflater = null; public Typeface rf; private Context context; public SectionListAdapter(Activity a, ArrayList<HashMap> 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 tpl = new HashMap(); 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(); }
任何帮助的家伙
我认为您的问题是您没有在适配器中实现getItem
。 它应该是
@Override public Object getItem(int arg0) { return data.get(arg0); }
此外, getItemAtPosition
将返回ArrayList
一个项目,即HashMap
。 所以这条线应该是
public void onItemClick(AdapterView> parent, View view, int position, long id) { HashMap item = (HashMap) list.getItemAtPosition(position); Toast.makeText(getApplicationContext(), item.get(SectionList.TITLE), Toast.LENGTH_SHORT).show(); }
您可以使用名为SimpleAdapter的内置Android适配器:
SimpleAdapter(Context context,List>,int resourceId,String from,int to)