我是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事件,但我不知道为什么会弹出此错误:
对于类型new Thread(){},未定义方法runOnUiThread(new Runnable(){})
靠近getapplication()方法
类型new Runnable(){}的方法getApplication()未定义
如果我创建这两种方法,错误就会消失,但是当我单击按钮时,它将不会转到facebookActivity.java文件。
任何人都可以告诉/帮助我添加什么来解决此问题。谢谢。
最佳答案
runOnUIThread(...)
是Activity
的一种方法。
因此,使用此:
getActivity().runOnUIThread(...);
但是要当心。您正在处理异步线程,因此您的
Fragment
可能会从其Activity
分离,从而导致getActivity()
返回null
。您可能要在执行之前添加一个if(isAdded())
或if(getActivity() != null)
检查。或者,使用
AsyncTask
,它自己处理在ui线程上运行的代码。