【问题标题】:troubled passing data from asynctask to fragment麻烦将数据从异步任务传递到片段
【发布时间】:2014-03-14 17:20:33
【问题描述】:

我试图从片段内的 AsyncTask 接收数据。我知道要通过活动来实现这一点,但在片段中遇到困难。

GetResult 类

public interface GetResult {

    void getData(ArrayList<String> result);

}

myFrag 类

public class myFrag extends Fragment implements GetResult{

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.myFrag_layout, container, false);
        Button myBtn = (Button) view.findViewById(R.id.Button1);

        myBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                myAsync obj = new myAsync();
                obj.setListener(getActivity());

            }
        });

    }
}

myAsync 类

public class myAsync extends AsyncTask<Void, Void, String>{
    GetResult interfaceObj = null;

    public void setListener( GetResult interfaceObj ) {
    this.interfaceObj =  interfaceObj;
    }
}

我遇到了 obj.setListener(getActivity) 的问题。它说 myAsync 类型中的方法 setListener(GetResult) 不适用于参数 (FragmentActivity)。在此先感谢大家。

【问题讨论】:

    标签: android-fragments android-asynctask


    【解决方案1】:

    我没有弄清楚问题出在哪里,但是还有另一种方法可以解决。我就在这里分享一下。

    第一个接口类GetResult.class是一样的

    片段类 myFrag.class 中的第二次更改

    public class myFrag extends Fragment{
    
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            view = inflater.inflate(R.layout.myFrag_layout, container, false);
            Button myBtn = (Button) view.findViewById(R.id.Button1);
    
            myBtn.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
    
                    getLoc obj = new getLoc(getActivity(), new GetResultInterface() {
    
                    @Override
                    public void processFinish(ArrayList<String> result) {
                        // U can get the result here
    
                    }
    
            obj.execute(url);
    
            });
    
        }
    }
    

    在 AsyncTask myAsync.class 中的第三个

    public class myAsync extends AsyncTask<Void, Void, String>{
        Context context;
        GetResult interfaceObj = null;
    
        public myAsync(Context context, GetResultInterface interfaceObj) {
            this.context = context;
            this.interfaceObj = interfaceObj;
        }
    
        @Override
        protected void onPostExecute(ArrayList<String> result) {
            super.onPostExecute(result);
            interfaceObj.processFinish(result);
        }
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多