Невозможно отобразить FragmentActivity на вкладке с прокруткой Android

У меня есть класс TabsPagerAdapter, который я использую для своих прокручиваемых вкладок в моем приложении для Android. Однако проблема заключается в том, что на одной из моих вкладок у меня есть FragmentActivity, и я не могу вернуть класс на своей вкладке с возможностью прокрутки.

Я не уверен что делать. Если я удалю

import com.spicycurryman.getdisciplined10.app.InstalledAppActivity;

Я все еще получаю ошибку.

Вот мой класс InstalledAppActivity:

package com.spicycurryman.getdisciplined10.app;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import com.javatechig.listapps.ApplicationAdapter;

import java.util.ArrayList;
import java.util.List;


public class InstalledAppActivity extends FragmentActivity {
    private PackageManager packageManager = null;
    private List<ApplicationInfo> applist = null;
    private ApplicationAdapter listadaptor = null;

    ListView InstalledAppList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.installed_apps);

        InstalledAppList = (ListView) findViewById(R.id.Installed_List);
        packageManager = getPackageManager();
        new LoadApplications().execute();

        InstalledAppList.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                ApplicationInfo app = applist.get(i);
                try {
                    Intent intent = packageManager
                            .getLaunchIntentForPackage(app.packageName);

                    if (null != intent) {
                        startActivity(intent);
                    }
                } catch (ActivityNotFoundException e) {
                    Toast.makeText(InstalledAppActivity.this, e.getMessage(),
                            Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    Toast.makeText(InstalledAppActivity.this, e.getMessage(),
                            Toast.LENGTH_LONG).show();
                }
            }
        });
    }





    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        packageManager = getPackageManager();
        new LoadApplications().execute();
        return inflater.inflate(R.layout.installed_apps, container, false);


    }


    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.block, menu);

        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        boolean result = true;

        switch (item.getItemId()) {
            case R.id.main_text: {
                displayAboutDialog();

                break;
            }
            default: {
                result = super.onOptionsItemSelected(item);

                break;
            }
        }

        return result;
    }

    private void displayAboutDialog() {
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(getString(R.string.app_name));
        builder.setMessage(getString(R.string.slogan));


        builder.setPositiveButton("Know More", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://javatechig.com"));
                startActivity(browserIntent);
                dialog.cancel();
            }
        });
        builder.setNegativeButton("No Thanks!", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });

        builder.show();
    }
    //first attempt
  /*  @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        InstalledAppList.setOnItemClickListener()
        //super.onListItemClick(l, v, position, id);

        ApplicationInfo app = applist.get(position);
        try {
            Intent intent = packageManager
                    .getLaunchIntentForPackage(app.packageName);

            if (null != intent) {
                startActivity(intent);
            }
        } catch (ActivityNotFoundException e) {
            Toast.makeText(InstalledAppActivity.this, e.getMessage(),
                    Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            Toast.makeText(InstalledAppActivity.this, e.getMessage(),
                    Toast.LENGTH_LONG).show();
        }
    }*/


     //2nd attempt
 /*   private AdapterView.OnItemClickListener OnItemClickListener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        }
        protected void onListItemClick(ListView InstalledAppList, View v, int position, long id) {
            ApplicationInfo app = applist.get(position);
            try {
                Intent intent = packageManager
                        .getLaunchIntentForPackage(app.packageName);

                if (null != intent) {
                    startActivity(intent);
                }
            } catch (ActivityNotFoundException e) {
                Toast.makeText(InstalledAppActivity.this, e.getMessage(),
                        Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                Toast.makeText(InstalledAppActivity.this, e.getMessage(),
                        Toast.LENGTH_LONG).show();
            }
        }

    };*/

    //third attempt



    private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) {
        ArrayList<ApplicationInfo> applist = new ArrayList<ApplicationInfo>();
        for (ApplicationInfo info : list) {
            try {
                if (null != packageManager.getLaunchIntentForPackage(info.packageName)) {
                    applist.add(info);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return applist;
    }

    private class LoadApplications extends AsyncTask<Void, Void, Void> {
        private ProgressDialog progress = null;

        @Override
        protected Void doInBackground(Void... params) {
            applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA));
            listadaptor = new ApplicationAdapter(InstalledAppActivity.this,
                    R.layout.snippet_list_row, applist);

            return null;
        }

        @Override
        protected void onCancelled() {
            super.onCancelled();
        }

        @Override
        protected void onPostExecute(Void result) {
            //setListAdapter(listadaptor);
            InstalledAppList.setAdapter(listadaptor);
            progress.dismiss();
            super.onPostExecute(result);
        }

        @Override
        protected void onPreExecute() {
            progress = ProgressDialog.show(InstalledAppActivity.this, null,
                    "Loading application info...");
            super.onPreExecute();
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
    }
}

Вот мой класс TabsPagerAdapter:

package info.androidhive.tabsswipe.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import com.spicycurryman.getdisciplined10.app.CustomList_Activity;
import com.spicycurryman.getdisciplined10.app.InstalledAppActivity;
import com.spicycurryman.getdisciplined10.app.Pre_InstalledApp_Activity;



public class TabsPagerAdapter extends FragmentPagerAdapter {

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
            case 0:
                return new InstalledAppActivity();
            case 1:
                return new Pre_InstalledApp_Activity();
            case 2:
                return new CustomList_Activity();
        }

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 3;
    }

}

Более того, когда я пытаюсь использовать автозамену, он говорит, что рефакторинг не может быть выполнен. И когда я пытаюсь изменить его на return new Fragment(); вместо этого ничего не появляется.

2 ответа

Решение
   the problem is that in one of my tabs I have a FragmentActivity and I am unable to return the class in my scrollable tab.

Ожидаем вернуть Fragment не Fragment Activity, Также FragmentPager не принимает Activity, что Активность не может быть создана только Фрагменты разрешены.

Документация для FragmentPagerAdapter

Implementation of PagerAdapter that represents each page as a Fragment that is persistently kept in the fragment manager as long as the user can return to the page.

решение:

вернуть класс, который расширяет Fragment не Fragment Activity

Фрагмент "Активность" - это фактически "Активность", которая поддерживает хостинг фрагментов, а не "Фрагмент".

Другие вопросы по тегам