6

アクティビティでActionBarSherlockアクションバーを使用しているため、SherlockActivityを拡張するクラスがあります。ただし、このアクティビティのリストビューにコンテキストメニューを追加しようとしています。このアクティビティは、リストビューの項目が長押しされたときに起動します。onContextItemSelected(MenuItem item)オーバーライドするものがないため、オーバーライドが無効であるという宣言でエラーが発生します。ただし、オーバーライドを削除すると、関数が呼び出されることはありません。これはSherlockActivityがActivityから継承する方法と関係があることは知っていますが、詳細についてはわかりません。多分私は輸入品を逃していますか?ここで関連するコードを参照してください:

public class Inbox extends SherlockActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_inbox);
    refreshMsgs(this.getCurrentFocus());
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    if (v.getId() == R.id.lstInbox){
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        String contactName = lstConversation.get(info.position).getContactName();   
        menu.setHeaderTitle(contactName);
        menu.add(Menu.NONE, 0, 0, "View contact");
        menu.add(Menu.NONE, 1, 1, "Delete thread");
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    SmsConversation selectedConvo = lstConversation.get(info.position);         

    if (item.getItemId() == 0){
        //view contact
        Intent viewcontactIntent = new Intent();
        String contactId = selectedConvo.getContactId();
        Uri uriContact = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contactId);
        viewcontactIntent.setData(uriContact);
        PendingIntent pViewIntent = PendingIntent.getActivity(getBaseContext(), 1, viewcontactIntent, 0);
        try {
            pViewIntent.send();
        } catch (CanceledException e) {
            e.printStackTrace();
        }
    } else {
      //DELETE thread
    }
    return true;
}
}

そして、これがクラスの私のインポートのすべてです:

import java.util.ArrayList;

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuInflater;

import android.app.Activity;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.Html;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
4

1 に答える 1

23

ずっと前に同様の問題に直面したため、次のように、完全修飾クラス名 ( )を使用しonContextItemSelected()て法線を強制することでオーバーライドしました。MenuItemandroid.view.MenuItem

@Override
public boolean onContextItemSelected (android.view.MenuItem item)
{
  //implementation
}
于 2013-01-24T01:52:28.287 に答える