2016-11-17 40 views
0

我試圖完成一項任務,即使我已經閱讀了其他相同的主題,但我遇到了極大的困難。無法轉換爲android.app.Activity:試圖將搜索添加到片段中

形勢

我有一個導航模板生成的程序,我嘗試添加搜索功能。我已經使用活動完成了這個任務,但是我還沒有能夠用碎片重新創建這個任務。

問題

當我嘗試尋找我的錯誤。

了java.lang.RuntimeException:無法實例活動 ComponentInfo {} .MySearchableActivity: java.lang.ClassCastException: .MySearchableActivity 不能轉換到android.app.Activity

我相信這樣做已經完成,因爲我正在調用一個片段的意圖,但是我不確定我能做到這一點。

public class MySearchableActivity extends Fragment { 
    RequestQueue requestQueue; 
    List<NumberResults> storiesList = new ArrayList<>(); 
    private RecyclerView recycle; 


    private static final String TAG = "junk"; 
    private Toolbar toolbar; 
    private ListView myList; 
    // final Context context = this; 

    // @Override 
    //protected void onCreate(Bundle savedInstanceState) 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     //super.onCreate(savedInstanceState); 
     // setContentView(R.layout.fragment_ministry_numbers); 

     // toolbar = (Toolbar) findViewById(R.id.app_bar); 
    // setSupportActionBar(toolbar); 
     Log.i(TAG, "in MySearchableActivity"); 


     View layout = inflater.inflate(R.layout.fragment_ministry_numbers, container, false); 
     recycle = (RecyclerView) layout.findViewById(R.id.drawrList); 
     recycle.setLayoutManager(new LinearLayoutManager(getActivity())); 
     recycle.setHasFixedSize(true); 


     Intent intent = getActivity().getIntent(); 
     handleIntent(intent); 

     return layout; 
    } 

    private void handleIntent(Intent intent) { 
     // get the query out of the intent 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String searchQuery = intent.getStringExtra(SearchManager.QUERY); 
      doSearchQuery(searchQuery); 
     } 

    } 
    /* 
    @Override 
    protected void onNewIntent(Intent intent) { 
     Log.i(TAG, "in onNewIntent"); 
     getActivity().setIntent(intent); 
     handleIntent(intent); 
    } 
*/ 

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     menu.clear(); 
     inflater.inflate(R.menu.main, menu); 
     MenuItem item = menu.findItem(R.id.searchActionBarItem); 
     SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 
     MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); 
     MenuItemCompat.setActionView(item, searchView); 
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 
      @Override 
      public boolean onQueryTextChange(String newText) { 
       return false; 
      } 
     }); 
     searchView.setOnClickListener(new View.OnClickListener() { 
              @Override 
              public void onClick(View v) { 

              } 
             } 
     ); 
    } 


    private void doSearchQuery(String query) { 

     final MinNumAdapters rvAdapter = new MinNumAdapters(storiesList); 
     recycle.setAdapter(rvAdapter); 


     requestQueue = Volley.newRequestQueue(getActivity()); 
     String url = "http://werver.com/searchablewho.php?owner=" + query; 


     JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { 
      @Override 
      public void onResponse(JSONArray response) { 
       try { 
        if (response.length() > 0) { 
         storiesList.clear(); 
         for (int i = 0; i < response.length(); i++) { 
          JSONObject jsonObject = response.getJSONObject(i); 
          NumberResults stories = new NumberResults(); 

          if (!jsonObject.isNull("number")) { 
           stories.name = jsonObject.getString("number"); 
          } 
          if (!jsonObject.isNull("owner")) { 


           stories.age = jsonObject.getString("owner"); 



          } 
          storiesList.add(i, stories); 
         } 
         rvAdapter.notifyDataSetChanged(); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       // do something 
      } 
     }); 

     requestQueue.add(jsonArrayRequest); 

    } 

} 

堆棧跟蹤

11-17 17:15:00.308 18802-18802/? E/AndroidRuntime: FATAL EXCEPTION: main 
Process: technologies.mirage.prigovdirectory, PID: 18802 
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{technologies.mirage.prigovdirectory/technologies.mirage.prigovdirectory.MinNumResults.MySearchableActivity}: java.lang.ClassCastException: technologies.mirage.prigovdirectory.MinNumResults.MySearchableActivity cannot be cast to android.app.Activity 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
    at android.app.ActivityThread.access$800(ActivityThread.java:151) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
Caused by: java.lang.ClassCastException: technologies.mirage.prigovdirectory.MinNumResults.MySearchableActivity cannot be cast to android.app.Activity 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1066) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
    at android.app.ActivityThread.access$800(ActivityThread.java:151)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:135)  
    at android.app.ActivityThread.main(ActivityThread.java:5254)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:372)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  

呼叫搜索

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    //getMenuInflater().inflate(R.menu.main, menu); 


    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 


    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 

    MenuItem searchActionBarItem = menu.findItem(R.id.searchActionBarItem); 

    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchActionBarItem); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(true); 


    return true; 
} 

應用清單

<uses-permission android:name="android.permission.CALL_PHONE"/> 
<uses-permission android:name="android.permission.INTERNET" /> 
<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <action android:name="android.intent.action.SEARCH"/> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value=".MinNumResults.MySearchableActivity"/> 
    </activity> 



    <activity 
     android:name=".MinNumResults.MySearchableActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH"/> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/search_config"/> 
    </activity> 
</application> 

+0

請發佈所有課程和堆棧跟蹤! – BrunoDM

+0

@BrunoDM更新。謝謝 –

+0

你怎麼稱呼MySearchableActivity?看起來,你嘗試像活動一樣使用它,但實際上它是一個片段。你不應該這樣命名片段。 – lewkka

回答

0

命名片段作爲活動將不起作用:您不能使用片段作爲活動並在AndroidManifest中搜索。

您必須閱讀thread。希望這會幫助你找到正確的方法。 GL

相關問題