我是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线程上运行的代码。

07-24 09:45
查看更多