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 不会解析我的应用程序中的片段。这是为啥?