1. 程式人生 > >Android ListView item裡控制元件的監聽

Android ListView item裡控制元件的監聽

在進行android開發的時候,我們會經常遇到,需要監聽listview的item的控制元件(如button)的問題,比如點選item的圖片跳轉詳情頁,音樂列表裡的item都有一個播放按鈕,點選這個播放按鈕,播放相應的音訊。以下是個人的解決方法:
首先需要我們自己寫一個介面卡,繼承BaseAdapter類,實現View.OnClickListener介面:

public class ListViewAdapter extends BaseAdapter implements View.OnClickListener {
    private List<Audio> ContentList;//需要裝配的資料
private LayoutInflater inflater; private Callback callback; public interface Callback{ public void click(View v); } public ListViewAdapter(Context context,List<Audio> contentList, Callback callback) { ContentList = contentList; this.callback = callback; inflater=LayoutInflater.from(context); } @Override
public void onClick(View v) { callback.click(v); } @Override public int getCount() { return ContentList.size(); } @Override public Object getItem(int position) { return ContentList.get(position); } @Override public long getItemId(int
position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView==null){ convertView=inflater.inflate(R.layout.listviewitem_layout,null);//item佈局檔案 holder=new ViewHolder(); holder.home=convertView.findViewById(R.id.userhome); holder.name=convertView.findViewById(R.id.username); holder.time=convertView.findViewById(R.id.crt); holder.button=convertView.findViewById(R.id.url); convertView.setTag(holder); }else { holder=(ViewHolder)convertView.getTag(); } holder.home.setText(ContentList.get(position).getHome()); holder.name.setText(ContentList.get(position).getName()); holder.time.setText(ContentList.get(position).getDate()); holder.button.setOnClickListener(this); holder.button.setTag(position); return convertView; } public class ViewHolder{//根據自己的佈局修改 public TextView home,name,time; public Button button; } }

在listview的activity裡,重寫介面卡中的Callback介面的方法

public class Detail_activity extends AppCompatActivity implements ListViewAdapter.Callback {
    ...
    ...
    @Override
    public void click(View v) {//重寫Callback的click方法
        Integer position=(Integer)v.getTag();//獲取位置
        String url=audioList.get(position).getUrl();//根據位置獲取資料
        /*
        **在這裡寫實際業務操作**
        */
    }
}

本人第一次學android開發,還有很多不懂的地方,只能邊學邊記了。