android - 从 Fragment 完成一个 Activity

标签 android android-asynctask android-fragments

在我的应用程序中,我有 2 个 fragment , fragment A 和 fragment B。在这两个 fragment 上,我正在做一些 XML 解析和填充 ListView 。我想为我的应用程序实现启动画面。以便它在解析和填充期间显示 ListView 并在完成时完成。为此,我创建了一个 Activity SplashActivity。我在 FragmentA 上实现了 asyntask,并在执行前部分调用了 SplashActivity。现在,当应用程序启动时,SplashActivity 开始了。但是我无法在 FragmentA 的执行后完成这个 Activity 。 getActivity().finishActivity() 不工作。请有人帮我解决这个问题,或者建议我另一种在 fragment Activity 上实现启动画面的方法。提前致谢....

这是我的 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
    }

}

最佳答案

您不应将 Splash 实现为 Activity,而应将其实现为 DialogFragment。只需设置该对话框 fragment 的样式,使其全屏显示。

关于展示:

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

然后关闭:

SplashDialogFragment splashDlg = (SplashDialogFragment) getSupportFragmentManager().findByTag("SplashScreen");
splashDlg.dismiss();

关于android - 从 Fragment 完成一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643206/

相关文章:

android - 使用抽屉导航管理 fragment 生命周期

android - 在 PreferenceFragment 中从数据库加载/保存设置

java - Android fragment 事务动画在 View 寻呼机上不起作用

java - Android Dom4j 与线程

安卓联系人编程同步

java - Recyclerview 不可点击 android studio (也许是我的代码错误?)

Android 哪种类型的 feed 渲染速度更快?

android - 禁用 KeyGaurd 后无法重新启用它

java - "if block"中的语句在 "if condition"中的函数返回之前执行

android - AsyncTask 和 FragmentManager 的问题