Android - 片段中的Searchview未按预期工作

时间:2014-10-29 15:09:13

标签: android android-fragments searchview

我正面临片段的一些问题。 我的MainActivity包含一个DrawerLayout和一个FrameLayout,如下所示:

<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)。 我怎么能这样做?片段替换?这只能使用活动吗?

这是我的主要活动:

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;
}
}

菜单文件夹中的操作栏:

    <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文件夹中的可搜索文件:

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

我的Android Manifest:

<!--  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>

1 个答案:

答案 0 :(得分:0)

我通过片段中的custum操作栏直接使用searchview 在这里我们找不到活动,但使用 getActivity 可以获取所有小部件

searchView =(SearchView) getActivity() .findViewById(R.id.searchView1);