2016-08-25 13 views
1

searchView과 관련된 문제가 있습니다. 내 Fragments입니다.조각 제거/추가 문제 searchview

따라서 actionbar 내에서 search_icon을 누르면 searchClick() 메서드가 실행됩니다.

menu_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item android:id="@+id/search" 
    android:title="@string/app_name" 
    android:icon="@drawable/ic_search" 
    app:showAsAction="ifRoom|collapseActionView" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    android:onClick="searchClick" 
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" 
    /> 
</menu> 

MainActivity.Java

package formelhelfer5_10.formelhelfer5_10; 


import android.app.SearchManager; 
import android.content.Context; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.SearchView; 
import android.support.v7.widget.Toolbar; 
import android.view.MenuInflater; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

import android.content.Intent; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity implements SearchView.OnCloseListener, SearchView.OnQueryTextListener 
{ 




    @Override 
    protected void onCreate (Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     Intent sIntent = getIntent(); 
     if (Intent.ACTION_SEARCH.equals(sIntent.getAction())) { 
      String query = sIntent.getStringExtra(SearchManager.QUERY); 

     } 




    } 
    public void searchClick(MenuItem item){ 
     Fragment frag = new Results(); 
     Fragment rem = new FaecherFrag(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 

     ft.remove(rem).add(R.id.FragFaecher,frag).commit(); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu_main, menu); 


     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 

     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); 
     searchView.setOnCloseListener(this); 
     searchView.setOnQueryTextListener(this); 




     return true; 
    } 


    @Override 
    public boolean onClose() { 
     Fragment frag = new Results(); 
     Fragment rem = new FaecherFrag(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.remove(rem).add(R.id.results,frag).commit(); 
     return false; 
    } 

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

    @Override 
    public boolean onQueryTextChange(String query) { 
     TextView t = (TextView) findViewById(R.id.tv); 
     if (query.isEmpty()){return false;}else 
     {t.setText(query);} 

     return false; 
    } 
} 

searchClick 다음 현재 Fragment

activity_main.xml 제거,129,

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 


xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
    android:id="@+id/main_content" 
tools:context="formelhelfer5_10.formelhelfer5_10.MainActivity"> 


<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay"/> 

</android.support.design.widget.AppBarLayout> 

<include layout="@layout/content_main" /> 


</android.support.design.widget.CoordinatorLayout> 

content_main.xml

xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/main_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="formelhelfer5_10.formelhelfer5_10.MainActivity" 
    tools:showIn="@layout/activity_main" 
    android:background="?android:colorBackground"> 


    <fragment 
     android:id="@+id/FragFaecher" 
     android:name="formelhelfer5_10.formelhelfer5_10.FaecherFrag" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 

      /> 




</RelativeLayout> 

FaecherFrag.Java

package formelhelfer5_10.formelhelfer5_10; 

import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.lang.reflect.Array; 


public class FaecherFrag extends ListFragment { 
    sql sqlo = new sql(); 


    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     String[] m_fach = sqlo.getFaecher(getContext()); 


     ListAdapter adptFach = 
       new ArrayAdapter<>(
         getActivity(), android.R.layout.simple_list_item_1, m_fach); 
     setListAdapter(adptFach); 
     //Array m_fach wird als Liste angezeigt 
    } 
    @Override 
    public void onListItemClick(ListView l, View v, int position, long id){ 
     super.onListItemClick(l, v, position, id); 
     transFach(position); 
     //uebergibt die Position des Fachs an die naechste Methode 
    } 
    private void transFach(int position){ 

     String[] m_fach = sqlo.getFaecher(getContext()); 
     String sql_fach = m_fach[position]; //String für die SQL-Abfrage. Zeigt welches Fach ausgewaehlt wurde 
     String[] m_thema = sqlo.getThemen(getContext(), sql_fach); 


     Intent toThemen = new Intent(getActivity(),Themen.class); 
     toThemen.putExtra("thema_key",m_thema); 
     startActivity(toThemen); 

    } 




} 

와는 TextView

에서 쿼리를 표시 다른 Fragment 추가3210 fragment_results.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" android:layout_height="match_parent" 
     android:id="@+id/results" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:background="?android:colorBackground" > 


     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/tv" 
      android:text="Text" 
      android:textAppearance="?android:textAppearanceLarge" 
      android:textStyle="bold"/> 
    </RelativeLayout> 

Results.Java

package formelhelfer5_10.formelhelfer5_10; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Results extends Fragment { 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_results, container, false); 

     return rootView; 
    } 

} 

나의 첫번째 문제는 내가 쿼리를 제출할 때, 두 번째 Fragment (fragment_results)는 "사라"정상 ListFragment 것이있다 (activity_main)가 나타납니다. 이 문제를 해결하는 방법을 모르겠습니다. 두 번째 문제는 Search Widget을 닫거나 닫을 때 OnCloseListener이 두 번째 Fragment (fragment_results)을 제거하고 ListFragment (activity_main)을 표시 할 것으로 예상됩니다. OnCloseListener에 이것을 구현했지만 아무 일도 일어나지 않습니다. 또는 OnCloseListener을 다른 것과 혼동하고 있습니까?

내가 도와 주시면 기쁠 것입니다.

답변