1
我有一個gridview在一個活動,我試圖顯示一個上下文菜單每次點擊一個網格元素。我想要這個上下文菜單在文本視圖中顯示一個動態值(點擊的網格元素的位置)。我創建了我自己的上下文菜單,因爲我不需要警報或默認的android contextmenu。 我也是使用的SDK:TextView文本值刷新onclick
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
這是我爲GridView
public class Grid_Items extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_items);
GridView gridView = (GridView) findViewById(R.id.gridViewLayout);
gridView.setAdapter(new ImageAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener() {
View contextualMenuView = null;
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
// RelativeLayout that contains parent layout
RelativeLayout rootLayout = (RelativeLayout)findViewById(R.id.root);
// in case there is a context menu open, remove it
if(contextualMenuView!=null) {
rootLayout.removeView(contextualMenuView);
}
// inflate contextual menu
contextualMenuView = getLayoutInflater().inflate(R.layout.contextual_menu, rootLayout);
// sets values for the textview
TextView tv = (TextView) findViewById(R.id.tab1);
tv.setText("tab1 = "+String.valueOf(position));
}
- 我第一次點擊一格元素的java.class,我的上下文菜單顯示了正確的文本視圖中的文本值
- 第二次和每隔一段時間,菜單仍然存在,但textview文本值爲空,每當用戶點擊網格中的某個元素時,我需要「刷新」此值
佈局爲GridView活動
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridViewLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center">
</GridView>
</RelativeLayout>
佈局上下文菜單我誇大:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contextualMenuLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#ffffff">
<!-- -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_marginRight="10dip"
android:layout_marginLeft="10dip"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip"
android:textSize="28sp"
android:textColor="#ff0000">
</TextView>
有什麼我錯過了?
感謝您的回答,但是tv = contextualMenuView.findViewById(R.id.tab1);我需要添加強制轉換(TextView),如下所示: TextView tv =(TextView)contextualMenuView.findViewById(R.id.tab1); 和應用程序中的結果與以前相同(textview文本值在第一次輕敲後沒有刷新) – Don
當然,演員陣容。我編輯了我的答案:您是否可以嘗試膨脹ContextualMenuView並在onCreate()中實例化* TextView *?只是爲了確保您正在使用* TextView *的相同實例。 –
對不起,以前接受,其實我沒有得到我所需要的。通過在oncreate中移動textview的inflate和instanciate,現在總是顯示底部的contextmenu,我需要的是點擊一個項目動態地打開它。那麼textview的膨脹和instanciate應該留在onitemclicklistener? – Don