0

我的应用程序中有一个 Listview 显示数据库中的内容。这是一个自定义的可点击列表视图,我想为列表视图的每个元素添加一个按钮,因此当您单击此按钮时,它会拨打电话并拨打特定号码。

我已经阅读了一些类似的主题,但都提到了适配器中的“getView”方法,但我不知道它指的是什么。这是我的列表视图的相关代码:

private void displayListView() {

    // getExtra
    Bundle bundle = getIntent().getExtras();
    String title = bundle.getString("title", "Choose here :");
    String inInterval = bundle.getString("inInterval");
    Log.d(TAG, "inInterval = " + inInterval);

    poititle.setText(title);


    // put the results of the method in a cursor
    Cursor c = dbHelper.findPoiInTable(inInterval);

    String[] columns = new String[] { DatabaseAdapter.COL_NAME,
            DatabaseAdapter.COL_STREET, DatabaseAdapter.COL_WEBSITE,
            DatabaseAdapter.COL_TELEPHONE, DatabaseAdapter.COL_REMARKS,
            DatabaseAdapter.COL_PRICE };

    int[] to = new int[] { R.id.name, R.id.street, R.id.website,
            R.id.telephone, R.id.remarks, R.id.price };

    cursorAdapter = new SimpleCursorAdapter(this, R.layout.poi_info, c,
            columns, to, 0);

    ListView listView = (ListView) findViewById(R.id.poilistview);
    // Assign adapter to ListView
    listView.setAdapter(cursorAdapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        // Comportement des éléments de la listview
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            Intent i = new Intent(getApplicationContext(),
                    POIActivity.class);

            String name = ((TextView) view.findViewById(R.id.name))
                    .getText().toString();
            String website = ((TextView) view.findViewById(R.id.website))
                    .getText().toString();
            String telephone = ((TextView) view
                    .findViewById(R.id.telephone)).getText().toString();
            String remarks = ((TextView) view.findViewById(R.id.remarks))
                    .getText().toString();
            String price = ((TextView) view.findViewById(R.id.price))
                    .getText().toString();
            // i.putExtra(ID_EXTRA, name) ;
            i.putExtra(ID_NAME, name);
            i.putExtra(ID_WEBSITE, website);
            i.putExtra(ID_TELEPHONE, telephone);
            i.putExtra(ID_REMARKS, remarks);
            i.putExtra(ID_PRICE, price);
            startActivity(i);


        }

    }); }

这是我在 XML 文件中的按钮定义:

<Button
    android:id="@+id/callButton"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:layout_centerVertical="true"
    android:layout_marginRight="10dp"
    android:layout_toLeftOf="@+id/arrowImage"
    android:text=" Call "
    android:textSize="15sp" 
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:descendantFocusability="blocksDescendants" /> 

我当然尝试过设置侦听器的常用方法(.setOnClickListener 等),但我想必须从我的 displayListView() 方法中真正完成一些事情。
提前致谢 !

4

1 回答 1

1

不使用该方法设置按钮的单击getView是不可能的。您需要了解如何使用适配器。每个适配器都有一个调用的方法,该方法getView将位置作为参数,并且适配器返回需要处于该位置的视图。您需要覆盖SimpleCursorAdapter及其getView方法,并且在创建视图 ( R.layout.poi_info) 时,您需要将单击侦听器分配给按钮。您现在所做的是在单击列表中的项目(而不是按钮)时触发您的侦听器。无论如何,这是一个有很多讨论的主题,在谷歌中快速搜索可以给你答案。这是我找到的教程:http: //devtut.wordpress.com/2011/06/09/custom-arrayadapter-for-a-listview-android/

祝你好运

编辑 - 示例:

请注意我newView在这里使用过。在您阅读有关适配器的更多信息后,请阅读有关 CursorAdapter 的信息,您将了解它是什么。这个适配器有一点不同的行为。

public class ExtendedSimpleCursorAdapter extends SimpleCursorAdapter{

        public ExtendedSimpleCursorAdapter(Context context, int layout,
                Cursor c, String[] from, int[] to, int flags) {
            super(context, layout, c, from, to, flags);

        }

        public View newView (Context context, Cursor cursor, ViewGroup parent){
            View v = super.newView(context, cursor, parent);
            v.findViewById(R.id.your_button_id).setOnClickListener(yourClickListener);
        }
    }
于 2013-04-03T09:45:30.853 回答