2014-10-29 62 views
0

我正面臨片段的一些問題。 我的MainActivity包含DrawerLayout和FrameLayout裏是這樣的:Android - Searchview在片段中無法按預期工作

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!—- Main view (fragments) --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/cor_view"/> 

    <!-- Navigation drawer --> 
    <ListView android:id="@+id/lista" 
     android:layout_width="200dp" 
     android:layout_height="fill_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@color/cor_divider_drawer" 
     android:dividerHeight="1dp" 
     android:background="@color/background_drawer" 
     android:textColor="@color/cor_texto_drawer"/> 

</android.support.v4.widget.DrawerLayout> 

據我的抽屜式導航欄中的每個項目,具體的片段將在ID/content_frame顯示。這工作正常,但問題是,一個特定的片段在操作欄上有一個搜索選項,當我提交查詢時,結果不會顯示在該片段的相同「位置」。我的意思是,搜索的結果不會填充framelayout(id/content_frame)。 我該怎麼做?片段替換?這隻能使用活動嗎?

這是我的MainActivity:

public class MainActivity extends Activity 
{ 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    navigation.NavList.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) 
     { 
      // According to each item from menu, I’ll choose which fragment will be shown. 
      navigation.showFragment(position, MainActivity.this); 
     } 
    }); 

    // When the app starts, by default, the home will be shown. 
    navigation.showFragment(0, MainActivity.this); 
} 
} 

在方法showFragment我創造這樣 片段對象(在此實例中,位置將被設置成指向ABCFragment):

Fragment fragment = new ABCFragment(); 
FragmentManager fragmentManager = activity.getFragmentManager(); 
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

所以這是我的片段,有searchview:

public class ABCFragment extends Fragment implements OnQueryTextListener 
{ 
    /* 
    onCreateView … 
    */ 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
    // Action bar. 
    inflater.inflate(R.menu.activity_main_actions, menu); 

    searchManager = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE); 
    searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView. 
      setSearchableInfo(searchManager.getSearchableInfo(getActivity() 
      .getComponentName())); 
} 

@Override 
public boolean onQueryTextSubmit(String query) 
{ 
    searchView.clearFocus(); 
    return false; 
} 

@Override 
public boolean onQueryTextChange(String newText) 
{ 
    return false; 
} 
} 

我在菜單文件夾操作欄:

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
android:hint="@string/search_hint" 
android:inputType="number" 
android:label="@string/app_name" /> 

我的Android清單:

<!-- Main Activity --> 
<activity 
    android:name="com.test.MainActivity" 
    android:label="@string/app_name"> 
</activity> 

<!-- ABC Fragment --> 
<activity 
    android:name="com.test.ABCFragment" 
    android:label="@string/app_name"> 
    <meta-data 
     android:name="android.app.default_searchable" 
     android:value="com.test.SearchResultsActivity" /> 

    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

<!-- Search results activity --> 
<activity android:name="com.test.SearchResultsActivity" 
    android:parentActivityName="com.test.ABCFragment" > 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 

    <meta-data 
     android:name="android.app.searchable" 
     android:resource="@xml/searchable" /> 
</activity> 

回答

0

我」

<item android:id="@+id/action_search" 
      android:icon="@drawable/ic_action_search" 
      android:title="@string/action_search" 
      android:showAsAction="ifRoom" 
      android:actionViewClass="android.widget.SearchView"/> 

    <item android:id="@+id/action_new" 
      android:icon="@drawable/ic_action_new_event" 
      android:title="@string/action_new_event" 
      android:showAsAction="ifRoom" /> 

    <item android:id="@+id/action_refresh" 
      android:icon="@drawable/ic_action_refresh" 
      android:title="@string/action_refresh" 
      android:showAsAction="ifRoom" /> 

我在XML文件夾中搜索文件m使用se通過行動俗吧直接archview在片段 在這裏我們無法找到活動,但使用getActivity可以得到所有部件

搜索查看=(搜索查看)getActivity() .findViewById(R.id.searchView1 );