Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从片段内的tabhost获取视图或元素?_Android_Textview_Android View_Searchview_Fragment Tab Host - Fatal编程技术网

Android 如何从片段内的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

我在片段内部使用一个tabhost,我有两个选项卡,我想从这个tabhost外部将文本设置为当前选项卡中的文本视图

我的布局如下所示:

我尝试了以下几点:

  • 使用片段视图-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;
}