我的活动只包含一个列表视图。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView android:id="@+id/list_data"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1"/>
</LinearLayout>
此列表的每一行都由此xml文件设置样式。每行有2个文本视图和一个按钮。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:id="@+id/playPauseB"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Play" />
<TextView
android:id="@+id/rec_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="2dp"
android:gravity="center_vertical"
android:text="Example application"
android:textSize="20sp"
android:layout_toRightOf="@id/playPauseB" />
<TextView
android:id="@+id/rec_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/rec_name"
android:text="Sample Data 2"
android:textSize="15sp" />
</RelativeLayout>
此listview有一个cutom游标适配器。我的问题是如何为一行中的每个按钮设置onClick监听器。以及如何访问每行的按钮?我的活动有一个DBHelper对象和customCursor对象。我的适配器包含一个bindView和newView方法。如果需要更多细节,请发表评论。
答案 0 :(得分:3)
在getview()中简单添加点击监听器,就像你在活动中一样。
holder.button.setTag(position);
holder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pos = (Integer) v.getTag();
Log.d("#####", "tag pos=" + pos);
}
});
点击按钮,您需要set Tag & get Tag以避免排名问题。
答案 1 :(得分:0)
您可以为适配器的getView方法中的每一行设置onClickListener
像这样private View getView(int position, View convertView, ViewGroup parent) {
View row = // initialize your row
Button b = (Button)row.findViewById(R.id.button);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Do something
}
})
}
答案 2 :(得分:0)
假设您的游标适配器扩展BaseAdapter
;
实现getView方法如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=convertView;
Button playPauseBtn = (Button) view.findViewById(R.id.playPauseB);
playPauseBtn.setOnClickListener(playPauseListener);
}
OnClickListener playPauseListener = new OnClickListener() {
@Override
public void onClick(View view) {
//Do some thing ...
}
};
答案 3 :(得分:0)
在CustomAdapter类中更改getView方法,如下所示:
@Override
public View getView(final int arg0, View convertview, ViewGroup arg2) {
// TODO Auto-generated method stub
final ViewHolder holder;
if(convertview==null)
{
holder = new ViewHolder();
convertview = layoutinflater.inflate(R.layout.yourXmlName, null);
holder.txt1=(TextView)convertview.findViewById(R.id.rec_desc);
holder.txt2=(TextView)convertview.findViewById(R.id.rec_name);
holder.btn=(Button)convertview.findViewById(R.id.playPauseB);
convertview.setTag(holder);
}
else{
holder=(ViewHolder)convertview.getTag();
}
holder.txt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
});
holder.txt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
});
holder.btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
});
return convertview;
}
static class ViewHolder
{
TextView txt1;
TextView txt2;
Button btn;
}
答案 4 :(得分:0)
你可以试试这个
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View hView = convertView;
final ViewHolder holder;
if (convertView == null) {
hView = mInflater.inflate(R.layout.listrow, null);
holder = new ViewHolder();
holder.text1 = (TextView) hView.findViewById(R.id.text1);
holder.text2 = (TextView) hView.findViewById(R.id.text2);
holder.button = (Button) hView.findViewById(R.id.button);
hView.setTag(holder);
}else{
holder = (ViewHolder) hView.getTag();
}
holder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do your work on click...
}
});
return hView;
}
static class ViewHolder {
TextView text1;
TextView text2;
Button button;
}