Android:当我在片段附近使用它时,在 runOnUiThread 附近出现错误

Posted

技术标签:

【中文标题】Android:当我在片段附近使用它时,在 runOnUiThread 附近出现错误【英文标题】:Android: getting error near runOnUiThread when i use it near fragment 【发布时间】:2014-05-22 13:56:27 【问题描述】:

我是 android 开发新手,我想将按钮与动画相关联。我在runOnUiThread()getApplication() 附近遇到错误。当我将其添加为活动时,它很好,但是当在MainFragment 中声明时,它会给出错误。但是,当我修复错误时,它会创建一个方法并返回 false。

public class MainFragment extends Fragment 


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 

    View rootView = inflater.inflate(R.layout.activity_main, container, false);
    ImageButton btnFacebook = (ImageButton)rootView.findViewById(R.id.facebook2);
    final Animation alpha = AnimationUtils.loadAnimation(getActivity(), R.anim.anim_alpha);

    btnFacebook.setOnClickListener(new Button.OnClickListener()

        @Override
        public void onClick(View arg0) 
            arg0.startAnimation(alpha);

            Thread thread = new Thread()
            
                @Override               
                public void run()
                
                    try
                    
                        Thread.sleep(1000);
                    catch(InterruptedException e)                         
                    
                    runOnUiThread(new Runnable() 
                        @Override
                        public void run() 
                          startActivity(new Intent(getApplication(),FacebookActivity.class)); 
                        

                    );
                
            ;


            thread.start();
          ); 
    return rootView;

在 XML 文件中,我只有 facebook imagebutton。当我点击它时,它必须触发动画,然后必须发生 onclick 事件,但我不知道为什么会弹出这个错误:

方法 runOnUiThread(new Runnable()) 未定义用于类型 new Thread()

并且靠近 getapplication() 方法 未为类型 new Runnable() 定义方法 getApplication()

如果我创建这两种方法,错误就会消失,但是当我单击按钮时,它不会转到 facebookActivity.java 文件。

谁能告诉/帮助我应该添加什么来解决这个问题。谢谢。

【问题讨论】:

看看这个答案:[RunOnUIThread in fragment][1] [1]: ***.com/questions/16425146/runonuithread-in-fragment 【参考方案1】:

runOnUIThread(...)Activity 的一个方法。

因此,使用这个:

getActivity().runOnUIThread(...);

但是,请注意。您正在处理异步线程,因此您的Fragment 可能与其Activity 分离,导致getActivity() 返回null。您可能需要在执行前添加检查 if(isAdded())if(getActivity() != null)

或者,使用 AsyncTask,它会自行处理在 ui 线程上运行的问题。

【讨论】:

是否有必要使用检查 getActivity 和 AsyncTask 你能解释一下吗?请@Niek Haarman 我深入询问,因为我改变了上面的代码,你现在说它工作正常会导致将来有问题 你能帮我解决这个问题吗***.com/questions/22986878/…【参考方案2】:
runOnUiThread(new Runnable()) is method in Activity not in the Fragment.

所以你需要改变

runOnUiThread(new Runnable())

进入

getActivity().runOnUiThread(new Runnable())

对于您的要求,最好使用 Handler 而不是 Thread 等待 1000 毫秒..

【讨论】:

我会检查并让您知道它是否有效@kalyan pvs 谢谢@kalyan pvs 我在我的项目中插入了一个虚拟文件并检查了它,当我点击它时它会转到那个虚拟文件 ***.com/questions/22986878/… ....请帮我解决这个问题@kalyan pvs【参考方案3】:

请使用getActivity() 而不是getApplication()

返回与片段关联的活动。 活动是一个上下文。

【讨论】:

是的,但我还没有检查它是否有效@Lavekush Agrawal

以上是关于Android:当我在片段附近使用它时,在 runOnUiThread 附近出现错误的主要内容,如果未能解决你的问题,请参考以下文章

当我在括号中调用它时,Thymeleaf 不会解析我的应用程序中的片段。这是为啥?

Android中的“找不到活动”

android - 您是不是必须向清单中添加片段

当我运行“ionic run android -lc”时,Console.log 不显示

在 Android 片段中使用谷歌地图

React native run-android 不更新修改后的代码