作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在显示消息列表,使用从 Adaptar 显示 ListView 的 Activity,如下所示。
我需要在下面的 DiscussArrayAdapter
类中的 ImageView 中注册 ContextMenu 菜单。
如果我只是从 DiscussArrayAdapter
调用 registerForContextMenu(arrowImage);
它不会接受它。
另外,我不知道在哪里重写方法 onCreateContextMenu
我的messageActivity如下:
public class MessagesActivity extends Activity {
private ListView listView = null;
/** Called when the activity is first created. */
private DiscussArrayAdapter adapter;
private ListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_discuss);
registerReceiver(mHandleMessageReceiver, new IntentFilter(
DISPLAY_MESSAGE_ACTION));
adapter = new DiscussArrayAdapter(getApplicationContext(), R.layout.listitem_discuss);
lv.setAdapter(adapter);
我有 DiscussArrayAdapter
类:
public class DiscussArrayAdapter extends ArrayAdapter<OneMessage>{
private /*TextView*/EditText msgTextView;
private TextView sender;
private LinearLayout wrapper;
private SqlHelper dbHelper = null;
private Context context;
@Override
public void add(OneMessage object) {
dbHelper.addNewMessage(object);
super.add(object);
}
public DiscussArrayAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
this.context=context;
if (dbHelper == null) {
dbHelper = new SqlHelper(context);
}
}
public int getCount() {
return dbHelper.getContactsCount();
}
public OneMessage getItem(int index) {
return dbHelper.getOneComment(index+dbHelper.lastRawID());
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.listitem_discuss, parent, false);
}
wrapper = (LinearLayout) row.findViewById(R.id.wrapper);
ImageView arrowImage = (ImageView) row.findViewById(R.id.aquaplayicon);
// this .registerForContextMenu(arrowImage);
OneMessage coment = getItem(position);
msgTextView =/*(TextView)*/(EditText) row.findViewById(R.id.comment);
为简洁起见,我省略了其余代码。
最佳答案
context
菜单函数都是为类Activity
定义的,它们不存在于Adapter
类。
所以要么你需要让你的 adapter
成为 activity
的子类,要么你需要将 activity
传递给 adapter
以便它可以调用 register 函数,并且 Activity 将需要处理 context
菜单(或将事件传递给适配器来处理它)。
关于android - 如何从 ArrayAdapter 注册 ForContextMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15011488/
我是一名优秀的程序员,十分优秀!