如何从片段内部的tabhost获取视图或元素?

群居

我在片段内部使用了tabhost,我有两个标签,并且我想从此tabhost外部将文本设置为当前标签中的textview。

我的布局如下所示:

我尝试了以下操作:

  • 使用片段视图-null异常
  • 在Tabhost中膨胀片段并使用其视图-空异常
  • 使用tabhost.getCurrentTabView()-空异常

最后一种方法给我这个错误

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取动态片段视图?

来自分类Dev

如何从片段中获取视图?

来自分类Dev

如何从片段获取列表视图?

来自分类Dev

如何在OnCreateView()之外获取片段的视图

来自分类Dev

在Tabhost中获取片段为空

来自分类Dev

TabHost(从片段隐藏Tabhost)

来自分类常见问题

如何从文档片段中获取实际元素?

来自分类Dev

如何从文档片段中获取实际元素?

来自分类Dev

XQuery:如何跨元素获取内部元素

来自分类Dev

XQuery:如何跨元素获取内部元素

来自分类Dev

如何与TabHost活动中的片段进行通信

来自分类Dev

如何从活动获取对CardView内部视图的引用?

来自分类Dev

如何获取键盘附件视图内部的屏幕视图坐标?

来自分类Dev

如何获取活动片段视图的参数(如宽度和高度)?

来自分类Dev

如何在Android中获取所有视图片段?

来自分类Dev

如何获取对象内部数组元素的索引?

来自分类Dev

如何获取<iframe>的元素内部<iframe>?

来自分类Dev

如何从embed标签内部获取svg元素?

来自分类Dev

在元素内部获取元素

来自分类Dev

如何销毁片段(或视图)?

来自分类Dev

嵌套的tabhost片段android

来自分类Dev

片段类内部的fragmentActivity视图的onClick事件?

来自分类Dev

如何从Espresso内部获取视图以传递到IdlingResource?

来自分类Dev

如何从片段获取EditText

来自分类Dev

如何从内部AsyncTask访问片段

来自分类Dev

如何从片段中扩大视图?

来自分类Dev

如何从片段Android引用视图

来自分类Dev

如何从片段Android引用视图

来自分类Dev

如何使用Python Selenium在元素内部获取文本?