Android ListActivity中上下文相关弹出菜单的设计模式
我有一个ListActivity,其行定义如下:Android ListActivity中上下文相关弹出菜单的设计模式,android,Android,我有一个ListActivity,其行定义如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/me_games_won" android:textSize="16sp
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:id="@+id/me_games_won"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/gamesmate_username"
android:textSize="16sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/him_games_won"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/imageMenuGamesmate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_settings" />
</LinearLayout>
现在,当用户单击菜单项时,将执行一个操作,但需要行的值来正确设置请求的格式
我正在寻找最好的设计模式来做到这一点
可能是ListActivity的ListView的行视图的子类化,但是如何实现呢?
可能是对PopupMenu进行子类化,以便它保留用于创建行的数据版本?
等等
有人有好主意吗
干杯。
大卫 是否已将listview与适配器一起使用?这将使它非常容易处理,有许多关于如何处理的示例(例如)您是否使用了带适配器的listview?这将使它非常容易处理,有许多关于如何处理的示例(例如)一种可能的基于YAGNI的方法
- 子类化弹出菜单
- 将位置传递给菜单的自定义构造函数
- 使用onMenuItemClick()中的位置通过adapter.getItem(int位置)检索数据项,并在其中应用任何所需的逻辑
PPS。如果您需要各种弹出菜单,您可以创建一个工厂,知道如何在从getView()调用时生成正确的子类。一种可能的基于YAGNI的方法
- 子类化弹出菜单
- 将位置传递给菜单的自定义构造函数
- 使用onMenuItemClick()中的位置通过adapter.getItem(int位置)检索数据项,并在其中应用任何所需的逻辑
PPS。如果您需要各种弹出菜单,可以创建一个工厂,它知道如何在从getView()调用时生成正确的子类。这就是我的想法。。。不是最好的模式,但会达到它的效果。顺便问一下,您知道如何从弹出菜单访问活动吗?我希望已从活动启动对服务器的请求。如果其他类是活动中的内部类,请使用MyActivity.this。否则,可以传递活动,例如,作为另一个构造函数/方法参数。小心活动泄漏。如果你将对活动的引用保存在一些比它更久的对象中,它们就会发生。这就是我的想法。。。不是最好的模式,但会达到它的效果。顺便问一下,您知道如何从弹出菜单访问活动吗?我希望已从活动启动对服务器的请求。如果其他类是活动中的内部类,请使用MyActivity.this。否则,可以传递活动,例如,作为另一个构造函数/方法参数。小心活动泄漏。如果将对活动的引用保留在某些比活动更久的对象中,则可能会发生这种情况。
public View getView(int position, View convertView, ViewGroup parent) {
...
myimage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupMenu = new PopupMenu(v.getContext(), v);
popupMenu.getMenuInflater().inflate(R.menu.popupmenu_gamesmate, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
popupMenu.show();
}
});