2013-01-20 48 views
1

我試圖將Activity轉換爲片段,並且無法覆蓋此方法:onCreateOptionsMenu,onOptionsItemSelected,onContextItemSelected。 ,可能是一些導入語句丟失?不知道該怎麼辦。她是我的Class文件: package com.wts.ui;無法覆蓋片段上的onContextItemSelected

import java.util.Date; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.ContextMenu; 
import android.view.ContextMenu.ContextMenuInfo; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemLongClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.Toast; 

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

public class MainFragment extends Fragment { 

    protected final static int REQUEST_CODE = 1; 

    public static WordsDBAdapter dbAdapter; 
    private CustomAdapter cDataAdapter; 
    private Button button; 
    private EditText editWord; 
    private EditText editTranslate; 
    private ListView listView; 
    private String selectedWord; 
    private Cursor cursor; 

    // context menu 
    private final static int IDM_EDIT = 101; 
    private final static int IDM_DELETE = 102; 
    private final static int IDM_INFO = 103; 

    // options menu 
    private static final int IDM_ABOUT = 201; 
    private static final int IDM_EXIT = 202; 
    private static final int IDM_SETTINGS = 203; 
    private static final int IDM_QUESTION = 204; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 

     super.onActivityCreated(savedInstanceState); 

     dbAdapter = new WordsDBAdapter(getActivity()); 
     dbAdapter.open(); 

     displayListView(); 
     registerForContextMenu(listView); 

     // ================ListView onLongClick======================== 
     listView.setOnItemLongClickListener(new OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       cursor = (Cursor) listView.getItemAtPosition(arg2); 
       selectedWord = cursor.getString(WordsDBAdapter.ID_COL); 
       return false; 
      } 
     }); 

     // ================Button onClick======================== 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       String word = editWord.getText().toString(); 
       String translate = editTranslate.getText().toString(); 

       if (word.length() > 0 && translate.length() >= 0) { 
        Cursor cursor = dbAdapter.fetchWordsByName(word);// chek is 
                     // word 
                     // repeat 

        if (cursor.moveToFirst()) { 
         Toast.makeText(getActivity().getApplicationContext(), 
           getResources().getString(R.string.word_exist), 
           Toast.LENGTH_SHORT).show(); 
        } else if (!CheckWordInput(word) 
          || !CheckTranslateInput(translate)) { 
         Toast.makeText(
           getActivity().getApplicationContext(), 
           getResources().getString(
             R.string.incorrect_input), 
           Toast.LENGTH_SHORT).show(); 
        } else { 
         dbAdapter.insertWord(word, translate, " ", 
           String.valueOf(false), 0, 0, new Date()); 
         displayListView(); 

         editWord.setText(""); 
         editTranslate.setText(""); 
        } 
       } 
      } 
     }); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.activity_main, container, false); 

     button = (Button) view.findViewById(R.id.buttonAddWord); 
     listView = (ListView) view.findViewById(R.id.listWords); 
     editWord = (EditText) view.findViewById(R.id.editWord); 
     editTranslate = (EditText) view.findViewById(R.id.editTranslate); 

     return view; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
     // setContentView(R.layout.activity_main); 

    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     if (v.getId() == R.id.listWords) { 
      String[] menuItems = getResources().getStringArray(
        R.array.contextMenuItems); 

      menu.add(Menu.NONE, IDM_EDIT, Menu.NONE, 
        menuItems[StartActivity.CONTEXT_MENU_EDIT]); 
      menu.add(Menu.NONE, IDM_INFO, Menu.NONE, 
        menuItems[StartActivity.CONTEXT_MENU_INFO]); 
      menu.add(Menu.NONE, IDM_DELETE, Menu.NONE, 
        menuItems[StartActivity.CONTEXT_MENU_DELETE]); 

     } 
    } 

    // 
    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case IDM_EDIT: { 
      Intent intent = new Intent(getActivity(), EditActivity.class); 
      intent.putExtra(getResources().getString(R.string.fstRow), 
        cursor.getString(WordsDBAdapter.WORD_COL)); 
      intent.putExtra(getResources().getString(R.string.scndRow), 
        cursor.getString(WordsDBAdapter.TRANS_COL)); 
      intent.putExtra(getResources().getString(R.string.thrdRow), 
        cursor.getString(WordsDBAdapter.DESC_COL)); 

      startActivityForResult(intent, REQUEST_CODE); 
     } 
      break; 
     case IDM_DELETE: 
      dbAdapter.deleteWord(selectedWord); 
      displayListView(); 
      break; 
     case IDM_INFO: { 
      Intent intent = new Intent(getActivity(), InformationActivity.class); 
      for (int i = 1; i <= InformationActivity.nListItems; i++) 
       intent.putExtra(String.valueOf(i), cursor.getString(i)); 

      startActivity(intent); 
     } 
      break; 
     default: 
      return super.onContextItemSelected(item); 

     } 
     return true; 
    } 

    private void displayListView() { 
     // Cursor cursor = dbAdapter.fetchAllTranslated(); 
     Cursor cursor = dbAdapter.fetchAllTranslated(); 

     String[] columns = new String[] { WordsDBAdapter.KEY_WORD, 
       WordsDBAdapter.KEY_TRANSLATION, WordsDBAdapter.KEY_SUCCEEDED, }; 

     int[] to = new int[] { R.id.textViewTranslate, R.id.textViewWord, 
       R.id.textViewSuccessPoints }; 

     cDataAdapter = new CustomAdapter(getActivity(), R.layout.word_info, 
       cursor, columns, to); 

     listView.setAdapter(cDataAdapter); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.activity_main, menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case IDM_ABOUT: { 
      Intent intent = new Intent(getActivity(), AboutActivity.class); 
      startActivity(intent); 
      break; 
     } 
     case IDM_EXIT: { 
      Intent intent = new Intent(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_HOME); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
      getActivity().finish(); 
      break; 
     } 
     case IDM_SETTINGS: { 
      Intent intent = new Intent(getActivity(), SettingsActivity.class); 
      startActivity(intent); 
      break; 
     } 
     case IDM_QUESTION: { 
      if (!StartActivity.isMainActivitySart) 
       getActivity().onBackPressed(); 
      else { 
       Intent intent = new Intent(getActivity(), 
         QuestionActivity.class); 
       startActivity(intent); 
      } 
     } 
      break; 
     } 
     return true; 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE) { 
      if (intent.hasExtra(getResources().getString(R.string.fstRow))) { 
       dbAdapter.changeValue(
         selectedWord, 
         intent.getExtras().getString(
           getResources().getString(R.string.fstRow)), 
         intent.getExtras().getString(
           getResources().getString(R.string.scndRow)), 
         intent.getExtras().getString(
           getResources().getString(R.string.thrdRow)), 
         null, null, null, null); 
       displayListView(); 
      } 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     SettingsManager.setPreferedLanguage(getActivity());// set language 
     displayListView(); 
    } 

    public static boolean CheckTranslateInput(String str) { 
     Pattern inputPattern = Pattern.compile("[\\p{L} -]{0,25}"); 
     Matcher inputMatcher = inputPattern.matcher(str); 
     return inputMatcher.matches(); 
    } 

    public static boolean CheckWordInput(String str) { 
     Pattern inputPattern = Pattern.compile("[\\p{L} -]{1,25}"); 
     Matcher inputMatcher = inputPattern.matcher(str); 
     return inputMatcher.matches(); 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     dbAdapter.close(); 
    } 
} 

回答

1

你要想想你希望你的片段是什麼 - FragmentSherlockFragment

導入此:

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

所以,你的覆蓋覆蓋,因爲Menu &朋友屬於不同類別的權利比Fragment需求了 - 他們是ActionBarSherlock的類。

如果您擴展SherlockFragment,您的覆蓋應該可以正常工作,並且如果您使用的是ActionBarSherlock(基於您的標記,則是),建議擴展SherlockFragment

如果你想保持這個作爲一個經常性的片段,然後導入:

android.view.Menu 
android.view.MenuItem 
android.view.MenuInflater 
+1

非常感謝你! –