1

私はこのフォーラムと android 開発自体に慣れていないので、私の質問はおそらく非常にばかげたものになるでしょう。developer.android.com の Dev Guide を読み始めましたが、コンテキスト メニューのある部分まではすべて問題なく動作していました。今、いくつかのチェック可能な項目を含むサブメニューを含むコンテキスト メニューを作成しようとしました。そこで、サブメニューとアイテムを menu.xml に追加し、いくつかの item.setchecked(true) メソッドを onContextItemSelected(...) メソッドに追加しました。

menu.xml

<?xml version="1.0" encoding="utf-8"?>  
  <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/info"
        android:title="@string/info" />
    <item android:title="@string/change">
        <menu>
           <item android:id="@+id/checkable_item1"
               android:checked="true"
               android:checkable="true"
               android:title="@string/hello"/>
           <item android:id="@+id/checkable_item2"
               android:checkable="true"
               android:title="@string/moin"/>
           <item android:id="@+id/checkable_item3"
               android:checkable="true" 
               android:title="@string/aloha"/>
       </menu>
  </item>   
</menu>

私の .java ファイルの一部

...
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
      ContextMenuInfo menuInfo)
{
   super.onCreateContextMenu(menu, v, menuInfo);
   MenuInflater inflater1 = getMenuInflater();
   inflater1.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
   switch(item.getItemId())
   {
   case R.id.checkable_item1:
      if(item.isChecked()) item.setChecked(false);
      else item.setChecked(true);
      return true;
   case R.id.checkable_item2:
      if(item.isChecked()) item.setChecked(false);
      else item.setChecked(true);
      return true;
   case R.id.checkable_item3:
      if(item.isChecked()) item.setChecked(false);
      else item.setChecked(true);
      return true;
   default:
      return super.onContextItemSelected(item);
   }
}
...

問題は、メニューを開いてチェック可能なアイテムの1つを押すと、コンテキストメニューが閉じる直前に小さなボックスに緑色のチェックマークが表示されるのですが、メニューを再度開くとチェックマークが消えてしまうことです。ダニがボックスにとどまらない理由がよくわかりません。誰かが私にヒントを与えて、私が間違っていることを教えてくれたらいいのにと思います。楽しみにありがとう

ジャン・クロード91

4

1 に答える 1

0

私は自分で試したことはありませんが、ここの説明を正しく読んだら (http://developer.android.com/reference/android/app/Activity.html#onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo))、メニューが作成されるたびにレイアウト リソースが呼び出されます。「メソッドが戻った後にメニューを保持するのは安全ではない」ため、選択したアイテムを処理し、その選択をどこかに保持してから、選択可能なアイテムの現在の状態を menuInfo で onCreate に渡し、checked/unchecked を設定する必要があります。その情報を使用して。

そうしないと、メニューはデフォルト設定 (menu.xml) に基づいて毎回再作成されます。

于 2011-01-16T16:26:10.067 に答える