0

我对 SimpleCursorAdapter 和 ListView 有疑问。当我想通过从数据库中查询来创建动态列表菜单时。问题是列表视图无法设置 onClickListener 在用户单击时执行某些操作。这些是我的代码。

在文件“menu_header.xml”中

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/menu_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="5dip"
        android:paddingRight="5dip"
        android:background="@drawable/menu_background">

        <Button
                android:id="@+id/bt_back"
                android:layout_width="70dip"
                android:layout_height="40dip"
                android:layout_centerVertical="true"
                android:text="@string/menu_back" />

        <ImageButton
                android:id="@+id/bt_search"
                android:layout_width="50dip"
                android:layout_height="50dip"
                android:background="@null"
                android:src="@android:drawable/ic_menu_search"
                android:layout_alignParentRight="true"
                android:paddingLeft="5dip"
                android:paddingRight="5dip" />

</RelativeLayout>

文件“menu_wrapper.xml”

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical">

    <include layout="@layout/menu_header" />

    <RelativeLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">

            <ListView
                    android:id="@android:id/list"
                    android:layout_below="@id/menu_bar"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content" />

    </RelativeLayout>

</LinearLayout>

在文件“menu_choice.xml”中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/menu_selector"
        android:clickable="true"
        android:padding="10dip">

        <LinearLayout
                android:id="@+id/thumbnail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="3dip"
                android:layout_alignParentLeft="true"
                android:background="@drawable/image_bg"
                android:layout_marginRight="10dip">

                <ImageView
                        android:id="@+id/list_image"
                        android:layout_width="60dip"
                        android:layout_height="60dip"
                        android:src="@drawable/building" />

        </LinearLayout>

        <TextView
                android:id="@+id/eng_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignTop="@+id/thumbnail"
                android:layout_toRightOf="@+id/thumbnail"
                android:text="Building"
                android:textColor="#040404"
                android:typeface="sans"
                android:paddingTop="5dip"
                android:textSize="20dip"
                android:textStyle="bold" />

        <TextView
                android:id="@+id/thai_name"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/eng_name"
                android:textColor="#343434"
                android:textSize="15dip"
                android:layout_marginTop="3dip"
                android:layout_toRightOf="@+id/thumbnail"
                android:text="Test" />

        <ImageView android:layout_width="15dip"
                   android:layout_height="15dip"
                   android:src="@drawable/next_arrow"
                   android:layout_alignParentRight="true"
                   android:layout_centerVertical="true" />

</RelativeLayout>

最后一个是我用来创建菜单的文件

public class Menu extends ListActivity {

    private ListView listView;
    private ImageButton imageButtonSearch;
    private Button buttonBack;

    private Constants constants = Constants.getInstance();
    private Database database = new Database(this);
    private Beans beans = Beans.getInstance();
    private Context context = this;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu_wrapper);

        buttonBack = (Button)findViewById(R.id.bt_back);
        imageButtonSearch = (ImageButton)findViewById(R.id.bt_search);

        buttonBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        imageButtonSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent();
                i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivityForResult(new Intent(context, Search.class), beans.REQUEST_CODE);
            }
        });

        listView = this.getListView();
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                Log.d("Item Click","item click");
            }
        });

        database.open();
        Cursor cursorPlaceType = database.getPlaceType();
        startManagingCursor(cursorPlaceType);

        if(cursorPlaceType != null){

            String[] columns = new String[]{ constants.PLACE_TYPE_IMAGE, constants.PLACE_TYPE_ENAME, constants.PLACE_TYPE_TNAME };
            int[] to = new int[]{ R.id.list_image, R.id.eng_name, R.id.thai_name };

            SimpleCursorAdapter menuAdapter = new SimpleCursorAdapter(this, R.layout.menu_choice, cursorPlaceType, columns, to);
            menuAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
                @Override
                public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
                    if(view.getId() == R.id.list_image){

                        try {

                            String imageFile = constants.IMAGE_ASSETS + cursor.getString(columnIndex) + ".png";
                            Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open(imageFile));
                            ((ImageView)view).setImageBitmap(bitmap);

                        } catch (IOException e) { e.printStackTrace(); }
                        return true;
                    }//end if

                    return false;
                }//end setViewValue
            });
            this.setListAdapter(menuAdapter);

        }else{
            new AlertDialog.Builder(this)
                    .setMessage("Try again")
                    .setNeutralButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            finish();
                        }
                    }).show();
        }

    }//end onCreate()

确实感谢您的帮助。

4

1 回答 1

0

使用protected void onListItemClick(ListView l, View v, int position, long id)此方法ListActivity代替您的listView.setOnItemClickListener方法。

于 2013-02-19T08:00:49.093 回答