android – 片段的单独searchview

我有一个简单的活动,它包含一个tabbar来切换两个片段.这两个片段都是listFragment并实现了searchview,以便在listfragment中进行搜索.搜索视图始终显示标签栏上方的操作栏中.

我遇到的问题是,切换标签后,搜索视图的输入不会重置(转到其他片段).因此,第二个片段从searchview读取输入并相应地过滤listfragment,它实际上读取了我在片段1中时输入的输入.

我想要的是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(),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,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,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(),taken);
    setlistadapter(adapterTaak);

    return true;

}

}

搜索部分外,两个片段几乎相同.

解决方法

已经有一段时间了,但如果有人发现同样的问题,
这是我如何设法做到这一点.

只需在每个片段中实现onPrepareOptionsMenu()即可在里面,打电话onQueryTextChange( “”);传递“”作为查询字符串.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...