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

时间:2014-04-09 11:36:50

标签: java android xml android-fragments

我是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文件。

任何人都可以告诉/帮助我应该添加什么来解决这个问题。谢谢。

3 个答案:

答案 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()

返回与片段关联的活动。 活动是一个背景。