ListView itemId始终为0

时间:2017-02-24 10:35:22

标签: java android listview android-cursoradapter

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))));
}
}

1 个答案:

答案 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

查看游标中的数据本身