2011-05-02 24 views
2

我有一個列表視圖在我的android列表活動,它通過json文件獲取數據。在列表視圖中,我必須顯示項目的基本細節。當我們點擊一​​個項目時,我需要顯示關於點擊項目的更多信息。那麼如何識別用戶點擊了哪個項目呢?獲取Android列表中單擊的項目

+0

其中u需要表現出更多的信息? – 2011-05-02 06:06:21

回答

1

在你的監聽器實現你參考單擊的View,並在itemClick(或ExpandableList:groupClick/childClick)的情況下,你也有你的列表裏面的底層數據的位置。

所以,只需使用該位置從您用來填充列表(適配器)的數據結構中檢索點擊的數據即可。

更新

如果你有ListActivity,其中dataList成員保存您在列表中顯示的值,你只需要重寫它的onListItemClick方法:

/** 
* The list of custom data you display in this activity 
*/ 
private ArrayList<MyData> dataList; 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) 
{ 
    super.onListItemClick(l, v, position, id); 
    final MyData selectedValue = dataList.get(position); 
    //TODO: deal with this selectedValue 
} 

API文檔對於onListItemClick

當列表中的 項目被選中時,將調用此方法。 應該覆蓋子類。
子類可以調用 getListView()。getItemAtPosition(position) 如果他們需要訪問與選定項目關聯的數據 。

參數

  • l當點擊 發生
  • v被點擊內 ListView控件
  • position認爲 在位置視圖中的ListView列表
  • id這是 項的行ID點擊

一個完整的例子,你可以找到Android-er herehere

+0

你能多描述一下嗎?它很棒,如果你能給我一個例子的鏈接。 – Chrishan 2011-05-02 06:11:59

+0

我已經更新了我的答案,包含一個示例,以及一些鏈接,請看看。 – rekaszeru 2011-05-02 06:45:03

-1
public class MainActivity extends AppCompatActivity { 

private ListView listview; 
private ArrayList<DataModel> arrayList; 
private DataModel datamodel; 
private AdapterForList adapterForList; 

public ArrayList<DataModel> getArrayList(){ 
    arrayList = new ArrayList<DataModel>(); 
    datamodel = new DataModel(); 
    for(int i=0; i<8; i++){ 
     datamodel.setTextData("count"+i); 
    } 
    return arrayList; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    listview = (ListView) findViewById(R.id.listview); 

    adapterForList = new AdapterForList(this,getArrayList()); 
    listview.setAdapter(adapterForList); 
} 

private class AdapterForList extends BaseAdapter{ 
    ArrayList<DataModel> DataList; 
    private ViewHolder holder; 
    private LayoutInflater inflater; 
    private Context context; 

    private AdapterForList(Context context,ArrayList<DataModel> arrayList){ 
     this.DataList = arrayList; 
     this.context = context; 
     Log.d("hereeee","--->"+DataList.size()); 
    } 

    @Override 
    public int getCount() { 
     return DataList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return DataList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView == null) { 
      holder = new ViewHolder(); 
      inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      convertView = inflater.inflate(R.layout.raw_view, null, true); 
      holder.textview = (TextView) convertView.findViewById(R.id.textView); 
      holder.lltextview = (LinearLayout) convertView.findViewById(R.id.lltextview); 

      convertView.setTag(holder); 
     }else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.textview.setText(DataList.get(position).getTextData()); 

     holder.lltextview.setTag(R.integer.btnview, convertView); 
     holder.lltextview.setTag(R.integer.btnpos, position); 
     holder.lltextview.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       View tempview = (View) v.getTag(R.integer.btnview); 
       Integer pos = (Integer) v.getTag(R.integer.btnpos); 

       TextView tv = (TextView) tempview.findViewById(R.id.textView); 
       tv.setText("changeee"); 
      } 
     }); 

     return convertView; 
    } 

    private class ViewHolder{ 

     public TextView textview; 
     public LinearLayout lltextview; 
    } 
} 

}