gpt4 book ai didi

android - fragment 的单独搜索 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:38:01 28 4
gpt4 key购买 nike

我有一个简单的 Activity ,它包含一个标签栏来切换两个 fragment 。这两个 fragment 都是一个 listFragment 并实现了一个搜索 View ,以便在 listfragment 中进行搜索。搜索 View 始终显示在标签栏上方的操作栏中。

我遇到的问题是,一旦我切换选项卡(转到其他 fragment ),搜索 View 的输入不会重置。因此,第二个 fragment 从搜索 View 读取输入并相应地过滤列表 fragment ,这实际上读取了我还在 fragment 一时输入的输入。

我想要的是搜索 View 成为两个 fragment 的单独搜索 View 。有办法实现吗?

这是我的代码:

Activity

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 一

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 二

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;

}

}

除了搜索部分外,这两个 fragment 几乎完全相同。

最佳答案

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

只需在您的每个 fragment 中实现 onPrepareOptionsMenu() 并且在里面,调用onQueryTextChange(""); 将“”作为查询字符串传递。

关于android - fragment 的单独搜索 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13493457/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com