0

SimpleCursorAdapterを備えたアプリがあります。DBテーブルの内容をリストに表示することはできますが、リスト内の項目がクリックされたときに何かを実行したいと思います。Eclipseでソースに移動し、clickListenerをオーバーライドしようとすると、オーバーライドするものは何もありません。onListitemClickのようにオーバーライドするメソッドを探しています。どうすればいいですか?

Eclipseは、メソッドonListItemClickについても文句を言います。たとえば、スーパータイプメソッドをオーバーライドまたは実装する必要があると言います。@Overrideアノテーションを削除すると、そのエラーが発生し、リストは表示されますが、リスト内のアイテムに触れてもイベントは発生しません。

private class MyAdapter extends SimpleCursorAdapter {

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


        }

        @Override
        public
        View getView(int position, View convertView, ViewGroup parent) {
            Log.e(TAG, "inside myadapter getview");
            View v = super.getView(position, convertView, parent);
            if(v == null)
                return null;

            Cursor c = (Cursor)getItem(position);

            String phoneName = c.getString(c.getColumnIndex(LoginValidate.C_PHONE_NAME));
            String phoneNumber = c.getString(c.getColumnIndex(LoginValidate.C_PHONE_NUMBER));

            ((TextView)v.findViewById(R.id.phonename)).setText(phoneName );
            ((TextView)v.findViewById(R.id.phonenumber)).setText(phoneNumber);
            ((TextView)v.findViewById(R.id.phonename)).setTextColor(Color.BLACK);
            ((TextView)v.findViewById(R.id.phonenumber)).setTextColor(Color.BLACK);



            return v;
        }



    }// end of adapter

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {

        Log.e(TAG, "clicked an item in list");
    }
4

2 に答える 2

0

アダプターにはデフォルトでonListItemClick()メソッドがないため、アノテーションが気になります。

onListItemClick()をlistViewに関連付ける必要があります...次の方法で使用してみてください

ListView list;
list.setOnListItemClick(listAdapter); //if your adapter implements OnListItemListener

またはちょうどこのように

list.setOnListItemClickListener(new OnListItemClickListener()
{
      @override
      public void onClick(args)
      {
           listAdapter.onListItemClick(args); //you will want this to be the first or the last call here
           //maybe some other stuff if you want here
      }
 }

そしてそれはそれをするべきです。

総括する:

1)アダプターに正しいインターフェースを実装すると、オーバーライドアノテーションが必要になります

2)メソッドをアダプターに公開したままにし、リストビューに接続されたプライベートonListItemClickListenerから呼び出します。

于 2012-10-16T12:45:35.273 に答える
0

はいタートルボーイ、

これを行うには、リストビューが配置されているアクティビティのメソッドをオーバーライドします。

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> adapter, View arg1, int position, long arg3) {
        //do what you want to do            
}
});
于 2012-10-16T12:54:58.460 に答える