2012-11-21 3 views
6

두 개의 단편을 전환 할 수있는 탭바를 보유하는 간단한 활동이 있습니다. 두 조각은 모두 listFragment이며 listfragment 내에서 검색 할 수 있도록 searchview를 구현합니다. searchview는 항상 탭 위에있는 작업 표시 줄에 표시됩니다.단편 검색보기 구분

내가 가지고있는 문제는 searchview의 입력이 일단 다른 탭으로 이동하면 재설정되지 않는다는 것입니다. 따라서 두 번째 조각은 searchview에서 입력을 읽고 그에 따라 list 조각을 필터링합니다. 실제로 조각 하나에있을 때 입력 한 내용을 읽습니다.

내가 원하는 것은 searchview가 두 조각에 대한 별도의 searchview입니다. 이것을 달성 할 수있는 방법이 있습니까? 여기

내 코드입니다 :

활동

public class ActivityMainApp extends Activity implements ActionBar.TabListener { 

private FragmentManager fragmentManager = getFragmentManager(); 

@Override 
public void onCreate(Bundle icicle) { 

    super.onCreate(icicle); 
setContentView(R.layout.mainapp); 

    ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // Add tabs 
    ActionBar.Tab relatieTab = actionBar.newTab().setText("Relaties"); 
    ActionBar.Tab takenTab = actionBar.newTab().setText("Taken"); 
    //ActionBar.Tab urenTab = actionBar.newTab().setText("Uren"); 

    // Listeners 
    relatieTab.setTabListener(this); 
    takenTab.setTabListener(this); 

    // Tabs toevoegen aan actionbar 
actionBar.addTab(relatieTab); 
actionBar.addTab(takenTab); 

    // Create fragmentmanager to switch fragments 
    FragmentTransaction fragmentTransaction = this.fragmentManager.beginTransaction(); 
    Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_content); 

    if(fragment == null){ 
     FragmentTransaction ft = fragmentManager.beginTransaction(); 
     ft.add(R.id.fragment_content, new FragRelaties()); 
    } 

} 

public void onTabSelected(Tab tab, FragmentTransaction ft) { 

    FragmentTransaction fragmentTransaction = this.fragmentManager.beginTransaction(); 

    if(tab.getText().equals("Taken")){ 
     FragTaken fragment = new FragTaken(); 
     fragmentTransaction.replace(R.id.fragment_content, fragment); 
     fragmentTransaction.commit(); 
    } 

    if(tab.getText().equals("Relaties")){ 
     FragRelaties fragment = new FragRelaties(); 
     fragmentTransaction.replace(R.id.fragment_content, fragment); 
     fragmentTransaction.commit(); 
    } 

} 

public void onTabUnselected(Tab tab, FragmentTransaction ft) { 

} 

public void onTabReselected(Tab tab, FragmentTransaction ft) { 

} 

} 

조각 하나

public class FragRelaties extends ListFragment implements SearchView.OnQueryTextListener { 

private LayoutInflater inflater; 
private ModelRelatie modelRelatie; 
private AdapterRelatie relatieAdapter; 
public ArrayList<Relatie> relaties; 

public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     this.inflater = inflater; 

     Activity activity = getActivity(); 
     final Context context = activity.getApplicationContext(); 

     setHasOptionsMenu(true); 


     new AsyncTask<Void, Void, ArrayList<Relatie>>(){ 

      protected ArrayList<Relatie> doInBackground(Void... params) { 

       // Get all my contacts 
       modelRelatie = ModelRelatie.instantiate(context); 
       ArrayList<Relatie> relaties = modelRelatie.getRelaties(); 

       return relaties; 

      } 
      protected void onPostExecute(ArrayList<Relatie> relaties) { 

       // Initial input of objects in the list 
       relatieAdapter = new AdapterRelatie(inflater.getContext(), R.layout.relatieslijstitem, relaties); 
       setListAdapter(relatieAdapter); 

      } 

     }.execute(); 

     View view = inflater.inflate(R.layout.relaties, container, false); 

     return view; 

} 

@Override 
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { 

inflater.inflate(R.menu.relatie_menu, menu); 

      // Get the searchview 
    MenuItem zoekveld = menu.findItem(R.id.zoekveld_fragrelatie); 
    SearchView zoekview = (SearchView) zoekveld.getActionView(); 

    // Execute this when searching 
    zoekview.setOnQueryTextListener(this); 

    super.onCreateOptionsMenu(menu, inflater); 

} 

public void onListItemClick(ListView l, View v, int position, long id) { 
    // Things that happen when i click on an item in the list 
} 

public boolean onQueryTextSubmit(String query) { 
    return true; 
} 

public boolean onQueryTextChange(String zoekterm) { 

    Activity activity = getActivity(); 
    Context context = activity.getApplicationContext(); 

    // We start searching for the name entered 
    ModelRelatie modelRelatie = ModelRelatie.instantiate(context); 
    ArrayList<Relatie> relaties = modelRelatie.zoekRelatie(zoekterm); 

    // The returned objects are placed in the list 
    this.relatieAdapter = new AdapterRelatie(inflater.getContext(), R.layout.relatieslijstitem, relaties); 
    setListAdapter(relatieAdapter); 

    return true; 

} 

조각 두

public class FragTaken extends ListFragment implements SearchView.OnQueryTextListener { 

private LayoutInflater inflater; 
private AdapterTaak adapterTaak; 
private ModelTaken modelTaken; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     this.inflater = inflater; 

     Activity activity = getActivity(); 
     final Context context = activity.getApplicationContext(); 

     setHasOptionsMenu(true); 

     this.modelTaken = ModelTaken.instantiate(context); 
     ArrayList<Taak> taken = modelTaken.getTaken(); 

     // Initial input for the list 
     adapterTaak = new AdapterTaak(inflater.getContext(), R.layout.takenlijstitem, taken); 
     setListAdapter(adapterTaak); 

     View view = inflater.inflate(R.layout.taken, container, false); 
     return view; 

} 

@Override 
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { 

inflater.inflate(R.menu.taken_menu, menu); 

    // get the searview 
    MenuItem zoekveld = menu.findItem(R.id.zoekveld_fragtaken); 
    SearchView zoekview = (SearchView) zoekveld.getActionView(); 

    // Execute this when searching 
    zoekview.setOnQueryTextListener(this); 

    super.onCreateOptionsMenu(menu, inflater); 

} 

public boolean onQueryTextSubmit(String query) { 
    return true; 
} 

public boolean onQueryTextChange(String zoekterm) { 

    Activity activity = getActivity(); 
    Context context = activity.getApplicationContext(); 

    // Search the task by the inputed value 
    ModelTaken modelTaken = ModelTaken.instantiate(context); 
    ArrayList<Taak> taken = modelTaken.zoekTaak(zoekterm); 

    // Return the found items to the list 
    this.adapterTaak = new AdapterTaak(inflater.getContext(), R.layout.takenlijstitem, taken); 
    setListAdapter(adapterTaak); 

    return true; 

} 

} 

두 부분은 검색 부분을 제외하고 거의 동일합니다.

+2

동일한 문제가 발생합니다. 꽤 오랜 시간이 걸리지 만 답변을 얻으려면 게시하십시오. –

답변

10

꽤 많은 시간이 걸렸지 만 여전히 같은 문제가 발견되면 내가 그 일을 처리했습니다.

그냥 onQueryTextChange를 ("")를 호출,) 그 안에 당신의 조각의 각각 에서onPrepareOptionsMenu을 (구현; ""을 쿼리 문자열로 전달합니다.

+0

우리는 결국 searchview 사용에 대한 아이디어를 삭제했습니다. 대신에 비슷한 결과를 얻으려면 상태 표시 줄 바로 아래에 자체 편집 문구를 추가했습니다. 어쨌든 조심 해 줘서 고마워! – frank1fr

+1

안녕하세요. 도움이 될 것 같습니다.이 부분을 자세히 설명해주세요. – Dilip

+0

감사합니다. –