Android 如何从片段内的tabhost获取视图或元素?
我在片段内部使用一个tabhost,我有两个选项卡,我想从这个tabhost外部将文本设置为当前选项卡中的文本视图 我的布局如下所示: 我尝试了以下几点:Android 如何从片段内的tabhost获取视图或元素?,android,textview,android-view,searchview,fragment-tab-host,Android,Textview,Android View,Searchview,Fragment Tab Host,我在片段内部使用一个tabhost,我有两个选项卡,我想从这个tabhost外部将文本设置为当前选项卡中的文本视图 我的布局如下所示: 我尝试了以下几点: 使用片段视图-null异常 在tabhost中膨胀片段并使用其view-null异常 使用tabhost.getCurrentTabView()-null异常 最后一种方法给了我这个错误 FATAL EXCEPTION: main java.lang.NullPointerException at com.osembit
- 使用片段视图-null异常
- 在tabhost中膨胀片段并使用其view-null异常
- 使用tabhost.getCurrentTabView()-null异常
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元素呢
编辑:
好的,我找到了解决办法。Tabhosts获取“当前”的任何方法对我都不起作用,所以我做了一个变通方法 我用数据填充包,将其发送回当前选项卡,然后“重画”/“重新加载当前选项卡” 我的代码:
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;
}
在
Fragment
中创建一个public
方法,并让活动调用它。Squonk,您的意思是跨片段使用?我在其他任何地方都不需要它。我希望你不要对我的命名感到困惑,“搜索活动”基本上是“搜索片段”。@kalyanpvs添加了代码
@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;
}