1

グリッド要素がタップされるたびにコンテキスト メニューを表示しようとしているアクティビティに gridview があります。このコンテキスト メニューでテキストビュー (タップされたグリッド要素の位置) に動的な値を表示する必要があります。アラートやデフォルトの Android コンテキスト メニューが必要ないため、独自のコンテキスト メニューを作成しています。また、私はSDKを使用しています:

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />

これがグリッドビューの私のjava.classです

    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));

        }
  • グリッド要素を初めてクリックすると、コンテキスト メニューがテキストビューに正しいテキスト値で表示されます
  • 2回目と1回おきに、メニューはまだそこにありますが、テキストビューのテキスト値は空です。ユーザーがグリッド内の要素をタップするたびに、この値を「更新」する必要があります

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>

私は何を逃したのですか?

4

1 に答える 1

1

ContextualMenuViewインスタンス ( contextualMenuView )を使用して、tab1を取得してみてください。

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

また、 onCreate() メソッドでContextualMenuViewを膨らませ、そこでTextViewをインスタンス化することもできますか?

于 2012-12-22T15:15:47.413 に答える