方案 朋友我有一个ListView,我在FrameLayout中使用它将为我的DrawerLayout提供滑动菜单。我在ListView中有自定义按钮和文本,它们在单独的xml中定义为listitems。现在我使用customAdapter向ListView提供数据,该扩展CursorAdapter ...
我想获得点击的位置以及按钮点击事件以相应地获取数据...我的代码如下...
列出项目XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"
>
<!-- ToggleButton
android:id="@+id/button"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="10dp"
style="@style/toggleButton"
android:background="@drawable/silent_button_selector"
android:focusable="false"
/> -->
<ImageButton
android:id="@+id/button"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="10dp"
android:src="@drawable/icon_button"
/>
<TextView
android:id="@+id/calendarName"
android:layout_width="wrap_content"
android:layout_margin="10dp"
android:layout_height="wrap_content"
android:textSize="25sp"
android:layout_toRightOf="@+id/button"
/>
</RelativeLayout>
适配器类:
public class CalendarListAdapter extends CursorAdapter implements OnClickListener{
@SuppressWarnings("deprecation")
public CalendarListAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
TextView title = (TextView) view.findViewById(R.id.calendarName);
System.out.println("cursor details"
+ cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(1))));
title.setText(cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(1))));
Log.d("click position " , "position is " +cursor.getPosition() );
ImageButton button = (ImageButton) view.findViewById(R.id.button);
button.setOnClickListener(this);
Log.d("click position " , "position is " +cursor.getPosition() );
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View calendarListView = inflater.inflate(R.layout.calendar_list_item, null);
return calendarListView;
}
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
Log.d("item clicked", "clicked" );
}
}
现在发生了什么:
通过上面的实现,当我点击按钮时,它只给出了按钮点击事件,当我点击行/列表项时,我就得到了这个位置。
我需要做什么?
我需要同时获取位置和点击事件,所以当我点击第3行的按钮时,我需要位置3和按钮点击事件......
请告诉我这样做的最佳方法...感谢您的时间和努力..
答案 0 :(得分:13)
处理场景的简单方法是利用按钮标记
您的bindView中
ImageButton button = (ImageButton) view.findViewById(R.id.button);
button.setTag(cursor.getPosition());
然后在您的onClick中,您可以阅读标记
int position = (Integer) view.getTag();
答案 1 :(得分:0)
用户在数据库中使用....
在你的适配器中实现你的Onclicklistener ..
你的bindview中的......
ImageButton button = (ImageButton) view.findViewById(R.id.button);
button.setTag(cursor.getint("number colunm _id here!!");
在您的onclick中......
int position = (Integer) view.getTag();
再见