1

我对android编程很陌生,因此不能自己解决很多事情。在过去的几个小时里,我试图编写代码来根据用户单击列表视图进行一些活动。基本上,我需要做以下事情:

1) 我已经成功生成了一个包含 BOOK ID、BOOK NAME 和 WRITER 信息的列表视图 2) 如果我点击每一行,我想读取该行的 BOOK ID,返回主页然后运行预定义函数 x (BOOK_ID)在主页上。

我试图搜索很多,但作为一个新手,一切都让我更加困惑。任何帮助都感激不尽。

列表视图的单个块:

    <TextView
        android:id="@+id/bookname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Book Title" />
    <TextView
        android:id="@+id/bookid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Book ID" />

    <TextView
        android:id="@+id/writer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Writer" />
</RelativeLayout>

Java 类:

mylibmandbhandler db = new mylibmandbhandler(this);
        List<mylibman> allfld = db.getAllRecord();
        ArrayList<HashMap<String, String>> allbookList = new ArrayList<HashMap<String, String>>();
        for (mylibman cn : allfld) {
            HashMap<String, String> map = new HashMap<String, String>();
            map.put(LIST_KEY_ID, Integer.toString(cn.getBookid()));
            map.put(LIST_KEY_NAME, cn.getBookname());
            map.put(LIST_KEY_WRITER, cn.getWriter());
            allbookList.add(map);
        }
        list=(ListView)findViewById(R.id.list);
        adapter=new MylibmanList(this, allbookList); //calling adapter class
        list.setAdapter(adapter);
// UPTO THIS POINT CODE IS WORKING FINE

        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// NEED TO GET THE BOOKID OF THE ROW UPON CLICKING, GO BACK TO MAIN ACTIVITY, AND CALL A FUNCTION X()
            }
        });
4

3 回答 3

1

在您的 Adapter 类中,像这样实现 getItem(int position) ...

@Override
public Object getItem(int position) {
  return allBookList.get(position);
}

并像这样实现 OnItemClickListener ..

 list.setOnItemClickListener(new OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        HashMap<String, String> hashMap = (HashMap<String, String>) parent.getItemAtPosition(position);
        String string = hashMap.get(LIST_KEY_ID);
        int id = Integer.valueOf(string);
        Intent intent = new Intent();
        intent.putExtra("bookId",id);
        setResult(RESULT_OK,intent);
        finish();
     }
 });

以及如何启动 Activity for Result,请参阅2Dee 给出的链接

于 2013-11-09T12:43:24.980 回答
0

要检索对 ListView 中对象的引用,可以使用 OnItemClick 内部 Adapter 的 get 方法:

String bookId = adapter.get(position).get(LIST_KEY_ID);
// then return to your MainActivity, using the startActivityForResult mechanism
Intent returnIntent = new Intent();
returnIntent.putExtra("bookId",bookId);
setResult(RESULT_OK,returnIntent);     
finish();

有关在此处使用 startActivityForResult 的更多详细信息。

于 2013-11-09T12:34:23.433 回答
-1

用于将标签设置为您setTag(bookID)返回的视图,然后检索该标签getViewMylibmanListonItemClickview.getTag();

于 2013-11-09T12:32:00.390 回答