setOnItemClickListener
的id参数返回的值总是 0(零)无论我点击返回的值的位置总是 0
但是正确的位置值和我也尝试了adapterView.getItemIdAtPosition(i)
,点击列表中每个项目时的值仍为零
public class ListFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>{
ListView onlineList;
FloatingActionButton onlineListFab;
private static final int mLoaderId = 1;
ListAdapter listAdapter;
public ListFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_list, container, false);
initilize(v);
return v;
}
private void initilize(View v) {
onlineList = (ListView)v.findViewById(R.id.onlineList);
onlineListFab = (FloatingActionButton)v.findViewById(R.id.onlineListFab);
onlineListFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(),AddItem.class));
}
});
listAdapter = new ListAdapter(getActivity(),null);
onlineList.setAdapter(listAdapter);
onlineList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent details = new Intent(getActivity(),AddItem.class);
details.setData(Uri.withAppendedPath(TableName.mContentUri,String.valueOf(l)));
Toast.makeText(getActivity(),l+"",Toast.LENGTH_SHORT).show();
//startActivity(details);
}
});
loadItems();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
switch (id){
case mLoaderId:
return new CursorLoader(getContext(), TableName.mContentUri,null,null,null,null);
}
return null;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
listAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
listAdapter.swapCursor(null);
}
private void loadItems() {
if (getActivity().getSupportLoaderManager().getLoader(mLoaderId) == null) {
getActivity().getSupportLoaderManager().initLoader(mLoaderId, null, this).forceLoad();
} else {
getActivity().getSupportLoaderManager().restartLoader(mLoaderId, null, this).forceLoad();
}
}
}
AdapterCode:
public class ListAdapter extends CursorAdapter{
public ListAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false);
return v;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView name,price;
name = (TextView)view.findViewById(R.id.itemName);
price = (TextView)view.findViewById(R.id.itemPrice);
name.setText(cursor.getString(cursor.getColumnIndex(TableName.table1.mName)));
price.setText(String.valueOf(cursor.getInt(cursor.getColumnIndex(TableName.table1.mPrice))));
}
}
答案 0 :(得分:0)
您正在执行新的@Override
public long getItemId(int position) {
long result = 0;
if (mCursor.moveToPosition(position)) {
Log.d("SO", DatabaseUtils.dumpCurrentRowToString(mCursor);
result = mCursor.getLong(mCursor.getColumnIndex(TableName.table1.mId));
}
return result;
}
这是一个自定义类,因为您无法通过界面执行此操作。您是否更新了默认的getItemId方法?我不赌博。
在我的头顶,您的适配器将需要类似于以下的实现:
{{1}}
如果您无法解决问题,请使用DatabaseUtils
查看游标中的数据本身