2012-11-21 34 views
6

Tôi có một hoạt động đơn giản chứa một thanh tabbar để chuyển đổi hai đoạn. Hai mảnh là cả một listFragment và thực hiện một searchview để làm cho việc tìm kiếm có thể trong listfragment. Chế độ xem tìm kiếm luôn được hiển thị trong thanh tác vụ phía trên thanh tabbar.Tìm kiếm riêng biệt cho các mảnh vỡ

Vấn đề tôi gặp phải là đầu vào của chế độ xem tìm kiếm không được đặt lại sau khi tôi chuyển tab (chuyển sang phần khác). Vì vậy, đoạn thứ hai đọc đầu vào từ searchview và lọc listfragment cho phù hợp, mà thực sự đọc đầu vào tôi đã nhập khi tôi vẫn còn trong một mảnh.

Điều tôi muốn là chế độ xem tìm kiếm là chế độ xem tìm kiếm riêng biệt cho cả hai đoạn. Có cách nào để đạt được điều này?

Đây là mã của tôi:

Hoạt động

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) { 

} 

} 

Fragment một

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; 

} 

Fragment Hai

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; 

} 

} 

Cả hai đoạn đều giống hệt nhau ngoại trừ phần tìm kiếm.

+2

Bị mắc kẹt trên cùng một vấn đề. Đó là một thời gian khá dài nhưng nếu bạn đã đưa ra bất kỳ câu trả lời, xin vui lòng gửi nó. –

Trả lời

10

Đã lâu nhưng vẫn còn nếu có ai đó đang tìm cùng một vấn đề, đây là cách tôi quản lý để làm điều đó.

Chỉ cần thực hiện onPrepareOptionsMenu() trong mỗi mảnh vỡ của mình và bên trong của nó, gọi onQueryTextChange (""); truyền "" làm chuỗi truy vấn.

+0

Cuối cùng, chúng tôi đã bỏ ý tưởng sử dụng chế độ xem tìm kiếm. Thay vào đó, chúng tôi đã thêm edittext của riêng mình ngay bên dưới thanh trạng thái để đạt được kết quả tương tự. Cảm ơn bạn đã anwering anyway! – frank1fr

+1

Xin chào, nó có vẻ hữu ích, Bạn có thể xây dựng điều này không. – Dilip

+0

hoạt động này, cảm ơn –

Các vấn đề liên quan