Android 从片段中完成活动

Android 从片段中完成活动,android,android-asynctask,android-fragments,Android,Android Asynctask,Android Fragments,在我的应用程序中,我有两个片段,片段A和片段B。在这两个片段上,我正在做一些XML解析和填充ListView。我想为我的应用程序实现一个启动屏幕。这样,它会在ListView解析和填充期间显示,并在完成时完成。为此,我创建了一个活动SplashActivity。我在FragmentA上实现了asyntask,并在preexecute部分调用了SplashActivity。现在,当应用程序启动SplashActivity时,就可以开始了。但我无法在FragmentA执行后完成此活动。getActi

在我的应用程序中,我有两个片段,片段A和片段B。在这两个片段上,我正在做一些XML解析和填充ListView。我想为我的应用程序实现一个启动屏幕。这样,它会在ListView解析和填充期间显示,并在完成时完成。为此,我创建了一个活动SplashActivity。我在FragmentA上实现了asyntask,并在preexecute部分调用了SplashActivity。现在,当应用程序启动SplashActivity时,就可以开始了。但我无法在FragmentA执行后完成此活动。getActivity.finishActivity不工作。请有人帮助我解决此问题,或建议我使用其他方法在片段活动上实现启动屏幕。提前谢谢

这是我的片段a=>

    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实现为一个活动,而应该实现为一个DialogFragment。只需设置对话框片段的样式,使其全屏显示即可

关于显示:

SplashDialogFragment splashDlg = new SplashDialogFragment();
splashDlg.show(getSupportFragmentManager(), "SplashScreen");
然后结束:

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

您不应该将Splash实现为一个活动,而应该实现为一个DialogFragment。只需设置对话框片段的样式,使其全屏显示即可

关于显示:

SplashDialogFragment splashDlg = new SplashDialogFragment();
splashDlg.show(getSupportFragmentManager(), "SplashScreen");
然后结束:

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

只需回答以下问题,即您的标题实际上是从片段完成一项活动,根据文档使用界面从片段到活动进行交互始终是一种好方法:。因此,必须始终在片段中声明一个接口,该接口将在您的活动中实现,如下所示:

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();
       }
   }
}

只需回答以下问题,即您的标题实际上是从片段完成一项活动,根据文档使用界面从片段到活动进行交互始终是一种好方法:。因此,必须始终在片段中声明一个接口,该接口将在您的活动中实现,如下所示:

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();
       }
   }
}

完美的谢谢你!谢谢