2017-02-26 81 views
2

,我有一个FrameLayout main_activity和Fragment通话的AsyncTask从我的应用程序的活动

public class Fragment1 extends Fragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment1, container, false); 

    return view; 
    } 

    public class StartAsyncTask extends AsyncTask<Void,Void,Void>{ 

     @Override 
     protected Void doInBackground(Void... voids) { 
      Log.e("startAsyncTask", "start"); 
      return null; 
     } 
    } 

} 

我需要从MainActivity致电AsyncTask, 所以我用:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    android.support.v4.app.FragmentTransaction fragmentTransaction = 
      getSupportFragmentManager().beginTransaction(); 
    Fragment1 fragment1 = new Fragment1(); 
    fragmentTransaction.replace(R.id.fragment, fragment1).commit(); 
    new Fragment1.StartAsyncTask().execute(); 
} 

但它没有工作。 new Fragment1.StartAsyncTask().execute();与(不包括类)错误。

+0

我不明白你为什么要打电话片段的异步任务,但你的问题是这是一个内部类。您可以将其更改为'public static class StartAsyncTask extends AsyncTask ...',或者使用静态工厂方法。 –

+0

从片段内部调用'AsyncTask'是唯一可能的方式,覆盖'onViewCreated'并实例化你的'AsnycTask' –

+0

@YoniGross我将在MainActivity工具栏中使用一个searchview,所以我需要刷新AsyncTask以获得listview结果,我希望我解释得很好 –

回答

2

你可以这样做,从您的MainActivity你可以打电话给你的AsyncTask间接

ublic class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    android.support.v4.app.FragmentTransaction fragmentTransaction = 
      getSupportFragmentManager().beginTransaction(); 
    BlankFragment fragment1 = new BlankFragment(); 
    fragmentTransaction.replace(R.id.activity_main, fragment1).commit(); 
    fragment1.startASycnc(); 
    } 
} 

和您的片段看起来是这样的:

public class BlankFragment extends Fragment { 


public BlankFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_blank, container, false); 
} 

public void startASycnc() { 
    new StartAsyncTask().execute(); 
} 

public class StartAsyncTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... voids) { 
     Log.e("startAsyncTask", "start"); 
     return null; 
     } 
    } 
    } 
0

StartAsyncTaskFragment的内部类,而不是方法。如果您确实需要触发Fragment中的某些操作,那么请让它公开一个采取适当操作的公共方法,而不是让其外部的类了解其内部。

相关问题