私の Android アプリケーションには、プログレスバーを持つフラグメント アクティビティがあります。この進行状況バーは、フラグメントがインターフェイスを呼び出すときに表示されるように設定されます。したがって、フラグメント クラスのコードは次のようになります。
public class MainScreen extends FragmentActivity {
public interface OnConnectingToInternet {
public void showProgressbar(boolean flag);
}
// rest of codes
.
.
.
// Implementing Interface
public void showProgressbar(boolean flag) {
if(flag){
myProgressbar.showProgressBar();
} else {
myProgressbar.hideProgressBar();
}
}
}
各フラグメントはインターネットに接続してデータを取得する必要がありますが、その前にインターフェイスを呼び出す必要があります。あるクラスに対して次のコードを書きました (他のフラグメントのコードはこのようなものです)。
public class TopRecipesFragment extends Fragment {
private OnConnectingToInternet onConnectingToInternet;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// onConnectingToInternet = (OnConnectingToInternet) activity;
Log.i(TAG, "Fragment attached to activity.");
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
New MyAsyncTask.execute();
}
public class MyAsyncTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
Log.i(TAG, "myAsyncTask is about to start...");
onConnectingToInternet.showProgressbar(true);
}
@Override
protected Boolean doInBackground(Void... params) {
...
}
@Override
protected void onPostExecute(Boolean result) {
Log.i(TAG, "myAsyncTask is about to start...");
onConnectingToInternet.showProgressbar(false);
}
}
問題は、このインターフェイスをインスタンス化する方法がわからないことです。を入れないonConnectingToInternet = (OnConnectingToInternet) activity;
と、アプリケーションを実行した後、 でクラッシュしますNullPointerException
。
しかし、そのようにインスタンス化すると、キャストの問題でアプリケーションがクラッシュします。のように、通常の方法でもインスタンス化できませんonConnectingToInternet = new MainScreen();
。
解決策は何ですか?任意の提案をいただければ幸いです。ありがとう