2013-10-05 57 views
1

我創建了一個ListView使用baseadapter ..我加載列表視圖與來自API的JSON數據nw我想獲得我點擊的列表項的價值,並將其發送回數據..但它一直返回null ...Android的ListView返回null onItemClick使用baseAdapter

這是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(); 
} 

任何幫助球員

+0

哪條線返回null?你究竟想要展示什麼? – Szymon

+0

我想要返回特定列表項的文本我cclick ... 在吐司「tpi」變量給我空值 – 1baga

回答

3

我認爲你的問題是你沒有在你的適配器中實現getItem。它應該是

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

此外,getItemAtPosition將返回你的項目之一ArrayList,這是HashMap<String, String>。因此,該行應是

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(); 
} 
+0

是啊我只是試着改變我的代碼,你有什麼在那裏..我應用程序崩潰,我得到和從logcat錯誤的HashMap不能被鑄造到查看處理... – 1baga

+0

檢查我的編輯應該是什麼樣 – Szymon

+0

謝謝man..jez修復它... – 1baga

0

你也可以使用內置的Android適配器名爲SimpleAdapter:

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