我目前正在尝试在Android 4.0的应用程序中开发某种用户配置文件。在此活动中,我添加了一个未定义数量的以下类型的字段。现在我想在所有字段中添加一个上下文菜单,并访问该对中两个字段的文本,无论长按哪一个。
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="2"
android:orientation="horizontal"
android:rowCount="1"
android:paddingLeft="5dp">
<TextView
android:id="@+id/subscriberFieldTextPrefix"
android:layout_column="0"
android:layout_gravity="left"
android:layout_row="0"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:text="test"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#FFAAAAAA"
android:textIsSelectable="false" />
<TextView
android:id="@+id/subscriberFieldTextText"
android:layout_column="1"
android:layout_gravity="left"
android:layout_row="0"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:text="test"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textIsSelectable="false" />
</GridLayout>
我正在通过以下代码添加这些“行”:
view = LayoutInflater.from(this).inflate(R.layout.subscriber_field_text, null);
((TextView) view.findViewById(R.id.subscriberFieldTextPrefix)).setText(currentSubscriber.GetSpecialFields().get(i).GetField() + ": ");
((TextView) view.findViewById(R.id.subscriberFieldTextText)).setText(currentSubscriber.GetSpecialFields().get(i).GetValue());
registerForContextMenu(((TextView) view.findViewById(R.id.subscriberFieldTextPrefix)));
registerForContextMenu(((TextView) view.findViewById(R.id.subscriberFieldTextText)));
layout.addView(view);
这是我创建菜单的事件:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
menu.add(Menu.NONE, 1, 1, "test2");
}
现在,在这个事件中,我可以获得原始字段的ID,它只会引导我访问XML中的模板。我也得到原始字段的文本,但我不知道如何获得它们。文字已经足够了,我不需要这些文件。
我希望有人可以帮助......谢谢你。
答案 0 :(得分:0)
一种方法是将生成的TextView
分配给类变量并从中提取数据。
TextView blahText = ((TextView) view.findViewById(R.id.subscriberFieldTextPrefix)).setText(currentSubscriber.GetSpecialFields().get(i).GetField() + ": ");
稍后访问TextView
。通常可见的变量也可以是一个TextViews数组(或者可能是Map?),这样可以提供更多的可见性
List<TextView> textViewRows = new ArrayList<TextView>();
或
Map<String,TextView> mapOfRows = new HashMap<String,TextView>();
使用Map的一种方法是使用Menu作为Key,将View作为Value。
Map<MenuItem,View> mapOfTextViews = new HashMap<MenuItem,View>();
以便创建上下文菜单填充它们
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
MenuItem newMenu = menu.add(Menu.NONE, 1, 1, "test2");
mapOfTextViews.put(newMenu,v);
}
单击menuItem时,使用MenuItem查找当前视图。