2012-12-22 67 views
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> 

有什麼我錯過了?

回答

0

嘗試通過使用您的ContextualMenuView實例(contextualMenuView)檢索TAB1

tv = (TextView) contextualMenuView.findViewById(R.id.tab1); 

另外,你可以嘗試擡高你的ContextualMenuView在onCreate()方法和實例化TextView那裏呢?

+0

感謝您的回答,但是tv = contextualMenuView.findViewById(R.id.tab1);我需要添加強制轉換(TextView),如下所示: TextView tv =(TextView)contextualMenuView.findViewById(R.id.tab1); 和應用程序中的結果與以前相同(textview文本值在第一次輕敲後沒有刷新) – Don

+0

當然,演員陣容。我編輯了我的答案:您是否可以嘗試膨脹ContextualMenuView並在onCreate()中實例化* TextView *?只是爲了確保您正在使用* TextView *的相同實例。 –

+0

對不起,以前接受,其實我沒有得到我所需要的。通過在oncreate中移動textview的inflate和instanciate,現在總是顯示底部的contextmenu,我需要的是點擊一個項目動態地打開它。那麼textview的膨脹和instanciate應該留在onitemclicklistener? – Don