1

私のアプリケーションには、フラグメントAとフラグメントBの2つのフラグメントがあります。これらのフラグメントの両方で、XMLの解析とリストビューの入力を行っています。アプリにスプラッシュ画面を実装したいので、リストビューと終了の解析と入力中に表示されます。終わったら。このために、アクティビティSplashActivityを作成しました。FragmentAにasyntaskを実装し、実行前セクションでSplashActivityを呼び出しました。これで、アプリが起動するとSplashActivityが開始されますが、FragmentAの実行後ではこのアクティビティを終了できません。getActivity()。finishActivity()が機能していません。誰かがこの問題を解決するのを手伝ってくれるか、フラグメントアクティビティにスプラッシュ画面を実装する別の方法を提案してください。前もって感謝します....

これが私のFragmentA=>です

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflating layout
        View v = inflater
                .inflate(R.layout.headlines_fragment, container, false);

        return v;

    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {

        super.onViewCreated(view, savedInstanceState);
        Log.i("Tag", "onCreateView");

        // We set clear listener
        loading = (ProgressBar) getActivity().findViewById(R.id.progressBar1);

        if (Headlines.headflag == "malayalam") {
            urls = "http://www.abc.com/rssfeeds/19_18_17_25/1/rss.xml";

        }

        if (Headlines.headflag == "english") {
            urls = "http://www.abc.com/en/rssfeeds/1_2_3_5/latest/rss.xml";

        }

        new ProgressAsyncTask().execute();

        MainActivity.refresh.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                new ProgressAsyncTask().execute();

            }
        });

    }

    public void populate_listview() {

        newsList = new ArrayList<HashMap<String, String>>();

        // looping through all song nodes <song>

        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            newsList.add(map);
            MarqueeStr = MarqueeStr + " *** " + Title[i];

        }

    }

    public void StartProgress() {
        new ProgressAsyncTask().execute();
    }

    public class ProgressAsyncTask extends AsyncTask<Void, Integer, Void> {

        int myProgress;

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            myProgress = 0;

            Intent intent = new Intent(getActivity(), Splash.class);
            startActivityForResult(intent, 5); //Here I called Splash Activity

            loading.setVisibility(View.VISIBLE);

        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            getActivity().finishActivity(5);// Here I tried to finish flash activity

            if (Title == null) {

                final AlertDialog.Builder alertbox = new AlertDialog.Builder(
                        getActivity());

                alertbox.setMessage("Error in connection.Do you want to retry");
                alertbox.setPositiveButton("retry",
                        new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface arg0, int arg1) {
                                // getActivity().finish();
                                // Intent intent = new Intent(getActivity(),
                                // MainActivity.class);
                                // startActivityForResult(intent,1);

                            }

                        });

                alertbox.setNegativeButton("exit",
                        new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface arg0, int arg1) {

                                // getActivity().finish();

                            }

                        });

                alertbox.show();

            }

            list = (GridView) getActivity().findViewById(R.id.grid);

            // Getting adapter by passing xml data ArrayList
            adapter = new HeadlinesAdapter(getActivity(), newsList);
            list.setAdapter(adapter);
            loading.setVisibility(View.INVISIBLE);
            Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),
                    "fonts/karthika.TTF");
            MainActivity.flashnews.setText(MarqueeStr);
            if (Headlines.headflag == "malayalam") {
                MainActivity.flashnews.setTypeface(tf);

            }
            list.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {

                    Intent myintent = new Intent(
                            "com.abc.malayalam2headlinespodcast.PODCAST");
                    Bundle mybundle = new Bundle();
                    mybundle.putInt("number", position);
                    myintent.putExtras(mybundle);

                    startActivity(myintent);

                }
            });

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // TODO Auto-generated method stub
            parse();

            if (Title != null) {
                populate_listview();
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            // TODO Auto-generated method stub

        }

    }

    public static void parse() {

           //parsing done here
    }

}
4

2 に答える 2

4

スプラッシュをではActivityなく、として実装する必要がありますDialogFragment。フルスクリーンで表示されるように、ダイアログフラグメントのスタイルを設定するだけです。

上映に関して:

SplashDialogFragment splashDlg = new SplashDialogFragment();
splashDlg.show(getSupportFragmentManager(), "SplashScreen");

次に閉じます:

SplashDialogFragment splashDlg = (SplashDialogFragment) getSupportFragmentManager().findByTag("SplashScreen");
splashDlg.dismiss();
于 2012-11-30T10:28:44.753 に答える
1

あなたのタイトルである質問に実際に「フラグメントからのアクティビティを終了するには」に答えるだけで、ドキュメント:フラグメントからのアクティビティとの通信に従って、インターフェイスを使用してフラグメントからアクティビティに対話するのは常に良い方法です。したがって、アクティビティで実装されるインターフェイスを常にフラグメントで宣言する必要があります。これは次のようになります。

public class SplashActivity extends Activity implements FragmentA.FragmentListenerCallback {

   public void onFragmentInteraction() {
       //finish your activity or do whatever you like
       finish();
   }       
}

public class FragmentA extends Fragment {
   private FragmentListenerCallback fragmentListenerCallback;

   @Override
   public void onAttach(Activity activity) {
     super.onAttach(activity);
     fragmentListenerCallback = (FragmentListenerCallback) activity;
   }

   public interface FragmentListenerCallback {
       void onFragmentInteraction();
   }

   @Override
   protected void onPostExecute(Void result) {
       // TODO Auto-generated method stub
       super.onPostExecute(result);
       if(fragmentListenerCallback != null){
            fragmentListenerCallback.onFragmentInteraction();
       }
   }
}
于 2017-05-01T06:49:36.950 に答える