我是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图像按钮。当我点击它时,它必须触发动画,然后onclick事件必须发生,但我不知道为什么会出现这个错误:
方法runOnUiThread(new Runnable(){})未定义类型new Thread(){}
靠近getapplication()方法 方法getApplication()未定义类型new Runnable(){}
如果我创建了两个方法,则错误消失,但是当我点击按钮时,它将不会转到facebookActivity.java文件。
任何人都可以告诉/帮助我应该添加什么来解决这个问题。谢谢。
答案 0 :(得分:9)
runOnUIThread(...)
是Activity
的一种方法。
因此,请使用:
getActivity().runOnUIThread(...);
但是,要小心。您正在处理异步线程,因此Fragment
可能与Activity
分离,导致getActivity()
返回null
。您可能希望在执行前添加支票if(isAdded())
或if(getActivity() != null)
。
或者,使用AsyncTask
,它自己处理ui线程上的运行。
答案 1 :(得分:2)
runOnUiThread(new Runnable(){}) is method in Activity not in the Fragment.
所以你需要改变
runOnUiThread(new Runnable(){})
进入
getActivity().runOnUiThread(new Runnable(){})
根据您的要求,最好使用Handler
代替Thread
等待1000毫秒。
答案 2 :(得分:2)
请使用getActivity()
代替getApplication()
。
返回与片段关联的活动。 活动是一个背景。