我有一个片段,当单击列表项时,您可以使用onListItemClick确定哪个位置。现在我在每个列表项上都有一个按钮(删除按钮),我想知道按下时单击了哪个位置。我怎样才能做到这一点?看起来按钮的onClick方法必须在不同的Activity中,所以我不知道如何知道它的哪个位置被点击了。这是片段代码:
public class MapListFragment extends ListFragment implements
LoaderManager.LoaderCallbacks<Cursor> {
private static final int LOADER_ID = 1;
private static final String[] FROM = { Database.Maps.DATA,
Database.Maps.NAME };
private static final String[] CURSOR_COLUMNS = { Database.Maps.ID,
Database.Maps.DATA, Database.Maps.NAME };
private static final int[] TO = { R.id.li_map_image, R.id.li_map_name };
private SimpleCursorAdapter mAdapter;
// FIXME isn't this unnecessary?
public MapListFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// FIXME reverse the order so the newest sessions are at the top
mAdapter = new SimpleCursorAdapter(getActivity(),
R.layout.map_list_item, null, FROM, TO, 0);
mAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor,
int columnIndex) {
if (view.getId() == R.id.li_map_image) {
((ImageView) view).setImageURI(Uri.parse(cursor
.getString(columnIndex)));
return true;
}
return false;
}
});
setListAdapter(mAdapter);
getLoaderManager().initLoader(LOADER_ID, null, this);
}
@Override
public void onListItemClick(ListView list, View v, int position, long id) {
final Intent nextIntent = new Intent(getActivity(),
ViewMapActivity.class);
nextIntent.putExtra(Utils.Constants.MAP_ID_EXTRA, id);
startActivity(nextIntent);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getActivity(), DataProvider.MAPS_URI,
CURSOR_COLUMNS, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if (loader.getId() == LOADER_ID)
mAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}
和XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:descendantFocusability="blocksDescendants"
android:orientation="horizontal" >
<ImageView
android:id="@+id/li_map_image"
android:layout_width="50dp"
android:layout_height="match_parent"
android:contentDescription="thumbnail" />
<TextView
android:id="@+id/li_map_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:paddingLeft="8dp"
android:textSize="16sp" />
<ImageButton
android:layout_width="60dp"
android:layout_height="match_parent"
android:id="@+id/delete"
android:focusableInTouchMode="true"
android:background="@drawable/red_x"
android:layout_gravity="center|left"
android:onClick="deleteMap"/>
</LinearLayout>
答案 0 :(得分:0)
您应该能够在ImageButton单击处理程序中获取ImageButton的父级。假设您在适配器的列表项创建中添加了每个按钮侦听器
ImageButton btn_image = (ImageButton) itemview.findViewById(R.id.delete);
btn_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
View parentItem = view.getParent();
}
});
其中itemview是列表适配器的getView方法中的膨胀视图。
您对简单适配器的需求相当复杂。看看本教程http://www.vogella.com/tutorials/AndroidListView/article.html#adapterown,他将指导您制作自己的自定义适配器。你会看到&#34; getView&#34;自定义列表视图适配器内的方法。这是您设置每个列表项并添加按钮的地方。
答案 1 :(得分:0)
首先,您可以在列表项中放置一个隐藏字段,以便在您单击时。从视图中,您可以找到此字段(id)并获取其值。