2016-01-06 49 views
0

我在我的應用程序中使用此庫MaterialSearchView以實現Gmail,如搜索視圖。該庫使用一個Activity提供了實現細節。我嘗試了片段內的代碼,進行必要的更改。Android使用片段而不是庫的活動

要實現它,我們做這樣的事情從一個活動:

MaterialSearchView searchView = (MaterialSearchView) findViewById(R.id.search_view); 

但是,我使用的是片段代替我做的是:

searchView = (MaterialSearchView) getActivity().findViewById(R.id.search_view); 

,一切工作正常,除了語音搜索。該庫使用以下代碼執行語音搜索:

private void onVoiceClicked() { 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak an item name or number"); // user hint 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); // setting recognition model, optimized for short phrases – search queries 
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); // quantity of results we want to receive 
    if (mContext instanceof Activity) { 
     ((Activity) mContext).startActivityForResult(intent, REQUEST_VOICE); 
    } 

我該如何做這項工作? mContext在上面的代碼被設置在構造函數中:

public MaterialSearchView(Context context) { 
    this(context, null); 
} 

我怎樣才能使它從一個片段工作?代碼爲library

+0

什麼,確切地說,不工作? – cybersam

+0

它沒有開始處理語音操作的活動,在onVoiceClicked() –

回答

1

mContext可能不是Activity

嘗試使用此邏輯(複製自MediaRouteButton.getActivity())獲取Activity

Activity getActivity() { 
    Context context = getContext(); 
    while (context instanceof ContextWrapper) { 
     if (context instanceof Activity) { 
      return (Activity)context; 
     } 
     context = ((ContextWrapper)context).getBaseContext(); 
    } 
    return null; 
} 
+0

編輯圖書館的代碼,現在它的工作。謝謝 ! –