7

そのため、リスト内の項目をクリックして 1 つのアクションを実行する方法や、その項目を長押しして複数の項目を選択し、ActionBar を使用して何かを実行できる ActionMode に切り替える方法についてのアイデアについて、この以前の質問を読んでいました。それらのアイテムに。ただし、この回答には問題があります。具体的には、これを SherlockListFragment に実装しています (ActionBarSherlock を使用)。ただし、新しい MultiChoiceModeListener を宣言すると、Eclipse はいくつかのコンパイル エラーをスローします。

Description Resource    Path    Location    Type
Cannot override the final method from SherlockListFragment  DateTimeListFragment.java   /path/to/my/project line 127    Java Problem
The method inflate(int, Menu) in the type MenuInflater is not applicable for the arguments (int, Menu)  DateTimeListFragment.java   /path/to/my/project line 125    Java Problem

これらは、MultiChoiceModeListener を削除すると消えます。異常が起きていないので、何が原因なのかわかりません。

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
    {
        //super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.alarmsmenu, menu); //line 125
    }
    public boolean onOptionsItemSelected(MenuItem Item) //line 127
    {
        switch(Item.getItemId())
        {
        case R.id.addAlarm:
            addAlarm();
            return true;
        case R.id.editAlarms:
            return true;
        default:
            return super.onOptionsItemSelected(Item);
        }       
    }

私はとても混乱しています。MultiChoiceModeListener を実装すると、OnOptionsItemSelected をオーバーライドできないのはなぜですか?

編集:明確にするために、ここに私のインポートがあります。

import java.util.Calendar;
import java.util.GregorianCalendar;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.*;
import android.support.v4.content.Loader;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.DatePicker;
import android.widget.ListView;
import android.widget.TimePicker;

import com.actionbarsherlock.app.SherlockListFragment;
import com.actionbarsherlock.app.ActionBar; //Yes, it's unused...
import com.actionbarsherlock.view.*;
import com.commonsware.cwac.loaderex.acl.*;
4

3 に答える 3

6

reddit の親切な人が私に通知したように、どうやら ActionBarSherlock は現在 MultiChoiceModeListener をサポートしていないようです。リスナーがネイティブの Android メニューを必要としているときに、ActionBarSherlock のメニューを使用しているという事実も、おそらくこの問題に寄与しています。

于 2012-06-15T02:07:06.970 に答える
1

Eclipse を使用している場合は、すべてのimportディレクティブを削除してCtrl+ Shift+ o( Mac の場合は + + ) を押し、競合に基づいてインポートを非常に慎重に選択しCmdますShifto

確かにフラグメントを使用していない私の現在のSherlockActivitesは、次のことを行っています。

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

Activitys をsに変換していたときに、あなたが説明した正確な問題がありましたSherlockActivity

編集:私のクラスにインターフェースを追加するMultiChoiceModeListenerと、次のようなメソッドが生成されました:

public boolean onActionItemClicked( ActionMode mode, android.view.MenuItem item )
{
  // TODO Auto-generated method stub
  return false;
}

MenuItem は完全修飾されていることに注意してください。ここがヒントになるかもしれません。Android メニューを期待するものに Sherlock メニューを渡そうとしているのではないでしょうか。

私のアドバイスは、競合する可能性のあるすべての呼び出しを修飾しようとすることだと思います。どのメソッドが正しく呼び出されていないかがわかったら、そこから進みます。

たとえば、次のように変更します。

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)

に:

public void onCreateOptionsMenu(Fully.Qualified.Path.Menu menu, MenuInflater inflater)
于 2012-06-14T19:37:34.010 に答える
0

バニラ Android バージョンではなく、これら 2 つのクラスをインポートしていることを確認してください。

import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

また、ActionBarSherlockデモ プロジェクトをインポートして、ActionItem の例がそこで機能するかどうかを確認します。

于 2012-06-14T01:09:11.283 に答える