我在片段内部使用了tabhost,我有两个标签,并且我想从此tabhost外部将文本设置为当前标签中的textview。
我的布局如下所示:
我尝试了以下操作:
最后一种方法给我这个错误
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.osembitdesign.xxxx.SearchActivity$6.onQueryTextSubmit(SearchActivity.java:111)
at android.widget.SearchView.onSubmitQuery(SearchView.java:1204)
at android.widget.SearchView.access$900(SearchView.java:93)
at android.widget.SearchView$8.onEditorAction(SearchView.java:1179)
at android.widget.TextView.onEditorAction(TextView.java:4216)
at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:138)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:297)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
at dalvik.system.NativeStart.main(Native Method)
我想从搜索视图设置文本。
那么我如何从外部访问tabhosts元素呢?
编辑:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//View v = inflater.inflate(R.layout.activity_search, container, false);
final View rootView = inflater.inflate(R.layout.activity_search, container, false);
mTabHost = (FragmentTabHost) rootView.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("requests").setIndicator("Requests"),
RequestTab.class, null);
mTabHost.addTab(mTabHost.newTabSpec("searchtab").setIndicator("Search"),
SearchTab.class, null);
SearchView srchView=(SearchView)rootView.findViewById(R.id.searchView);
srchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
for(String i:testquery)
{
if(i.contains(query))
{
Log.v("Search Result",i);
View tv=mTabHost.getCurrentTabView();
TextView listSearchResults=(TextView)tv.findViewById(R.id.textViewTestSearch);
listSearchResults.setText(i);
}
}
return false;
}
return rootView;
//return v;
}
好的,我找到了解决方案。无论哪种方法对我不起作用,Tabhost都会得到“当前”消息,因此我采取了一种解决方法。
我用数据包填充数据包,将其发送回当前选项卡,然后“重绘” /重新加载当前选项卡。
我的代码:
srchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
for(String i:testquery)
{
if(i.contains(query))
{
//fill Bundle searchResults
searchResults.putString("rezultat", i);
//reload tabs
mTabHost.invalidate();
//i am switching my tabs, this refreshes UI
mTabHost.setCurrentTab(0);
mTabHost.setCurrentTab(1);
}
}
return false;
}
});
我在其中更新元素的片段代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_search_tab, container, false);
Bundle searchResults=getArguments();
if(searchResults!=null)
{
TextView textView=(TextView)v.findViewById(R.id.textViewTestSearch);
textView.setText(searchResults.getString("rezultat"));
}
return v;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句