簡単な背景: 基本的に、私たちの大学のシニア デザイン クラスのために構築している、私のグループの最初の Android アプリケーションです。それは基本的に、データベースを実装する際のナビゲーションとユーザー インターフェイスの実践でした。インストラクターは将来このアプリケーションを使用する予定であるため、android 2.3.x との下位互換性を持たせる必要がありました。
問題: SherlockListFragment は onListLongItemClick を実装しておらず、コード内に独自の考えを持っているようです。それをオーバーライドすることはできず、スーパーメソッドは含まれていません。
コード:
public class DBList extends SherlockListFragment implements
TextToSpeech.OnInitListener {
クラス
private int selectedItem;
操作中の変数
public void onListItemClick(ListView l, View v, int itemPosition, long id)
{
selectedItem = (int) id;
speakOut(this.items.get((int)id).getName());
}//END void onListItemClick
基本的なクリックは意図したとおりに機能します。selectedItem はコード テスト用です。使用目的は、文字列のみを話すことであり、他には何もありません。
@Override
public void onListLongItemClick(ListView l, View v, int itemPosition, long id)
{
super.onListItemLongClick(l, v, itemPosition, id);
Log.v(LOGTAG, "List Long Selection: launching context menu");
Log.v(LOGTAG, "Long id: " + id);
selectedItem = (int) id;
l.showContextMenu();
}//END void onListLongItemClick
これによりエラーがスローされます: Method onListLongItemClick is undefined for the type SherlockListFragment
データベース内のアイテムを編集または削除するためのコンテキスト メニューを作成することを目的としています。コンテキスト メニューが機能することはわかっていますが、何らかの理由でこのセクションのコードが読み取られません。ログタグがエコーバックされることはなく、コード行が削除されてもコンテキスト メニューが開きます。
答え:
どうやら getListView() の使用については考えられません。コードに含まれているかどうかに関係なく、コンテキストメニューを起動するときに混乱したと思います。
public void onActivityCreated(Bundle savedState)
{
super.onActivityCreated(savedState);
Log.v(LOGTAG, "Context Menu registartion complete");
registerForContextMenu(getListView());
getListView().setOnItemLongClickListener(new OnItemLongClickListener()
{
public boolean onItemLongClick(AdapterView<?> l, View v, int itemPosition, long id)
{
Log.v(LOGTAG, "List Long Selection: launching context menu");
selectedItem = (int) id;
l.showContextMenu();
return true;
}
});
}