2014-10-29 3 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> 

По каждому пункту из моей навигации ящик, определенный фрагмент будет показан на ид/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 я CREAT объект фрагмента, как этот (в этом примере, позиция будет установлена, чтобы указать на ABCFragment):

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

Так что это мой фрагмент, который имеет поиск:

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> 

ответ

0

I» м, используя ArchView через бар custum действие непосредственно в фрагменте Здесь мы не можем найти деятельность, но с использованием getActivity могут получить все виджеты

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

Смежные вопросы