如果父级不提供接口,则Android适配器提供默认onLongClick

时间:2017-09-25 18:26:14

标签: android interface onlongclicklistener

我有几个可以使用相同数组适配器的活动。如果活动没有实现它,我想提供一个默认的onLongClick:

public class BookAdapter extends ArrayAdapter<Book> {
...
    private View.OnLongClickListener onLongClickListener;
    public BookAdapter(Context context, ArrayList<Book> aBooks) {
        super(context, 0, aBooks);
        Log.i(TAG, "caller:" + context.getClass().getSimpleName());
        if (context instanceof View.OnLongClickListener) {
            Log.i(TAG, "yes");
            onLongClickListener = (View.OnLongClickListener)
                     context.onLongClickListener();
        }
        else {
            onLongClickListener = new View.OnLongClickListener() {
                public boolean onLongClick(View v)
                   String title = 
                           ((TextView)(v.findViewById(R.id.tvTitle)))
                          .getText().toString();
                   Log.v(TAG, "view onLongClick pressed for title \""
                             + title + "\"");
                   return true;
                }
            };
        }
    }
    @Override
    public View getView(
        int position, View convertView, ViewGroup parent) {
        ...
        convertView.setOnLongClickListener(onLongClickListener);
        ...
    }
...
}

但我似乎无法将调用者onClickListener分配给本地onLongClickListener。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

知道了。我挖掘了View.java的源代码,看看它是如何实现的,关键是在我提供的默认方法中将调用包装到父方法中。

Permissions for Users

如果有更清洁的方法,我很乐意听到它。

由于 史蒂夫史密斯