2017-02-26 82 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中的某些操作,那麼請讓它公開一個採取適當操作的公共方法,而不是讓其外部的類瞭解其內部。

相關問題