android setOnItemClickListener 无法使用 intent 传递数据

android setOnItemClickListener can't use intent to pass data

我使用 listview 并重写 setOnItemClickListener.In setOnItemClickListener(),我使用 intent 将数据传递给另一个 activity。但另一个 activity 收到空值。 代码是:

  1. QuerBook.java(发送数据)

public class QueryBook 扩展 Activity {

private List<BookItem> bookList = new ArrayList<BookItem>();
private Bundle saved;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    saved = savedInstanceState;
    setContentView(R.layout.querybook);
    Log.d("Activity1","haha"+getClass().getSimpleName());
    queryBook();
    BookAdapter adapter = new BookAdapter(QueryBook.this, R.layout.bookitem, bookList);
    ListView listView = (ListView) findViewById(R.id.list_view);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Log.d("Activity1",getClass().getSimpleName());
            // TODO Auto-generated method stub
            BookItem bookItem = bookList.get(position);

            id = bookItem.getId();
            Intent intent = new Intent(QueryBook.this, BookDetail.class);
            intent.putExtra("newid",id);
            //Log.d("bookid","hah id = "+id);


            startActivity(intent);

        }
    });

}

2.BookDetail.java(接收数据) public class BookDetail 扩展 Activity {

private List<BookItem> bookitemList = new ArrayList<BookItem>();
private int id;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bookdetail);
    Log.d("Activity",getClass().getSimpleName());
    Intent intent = getIntent();
    id = intent.getIntExtra("newid",-1);
    Log.d("bookid","book get  id is "+id);
 }

The 'id' is always return -1;

onItemClick()中变量id被定义为long。实际上它是签名中的一个参数:

    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

所以当你打电话给

intent.putExtra("newid",id);

您实际上是将 long 项放入 "extras" 捆绑包中,而不是 int

这就是为什么当您调用 getIntExtra() 时得到 -1,因为类型不匹配。