Android 通过“获取位置”活动在片段中循环查看

Android 通过“获取位置”活动在片段中循环查看,android,android-fragments,android-recyclerview,android-adapter,restore,Android,Android Fragments,Android Recyclerview,Android Adapter,Restore,这就是我的问题,我只有一个活动,从我启动我的viewpager片段开始,在我的viewpager中,我有4个包含recyclerViews的片段。每个片段都包含由网络上的数据填充的项目,当我点击其中一个时,我会得到一个WebView片段,但当我点击backbutton时,我丢失了Positon,因为它正在重新创建整个活动 我不知道如何不重新创建活动并恢复我的旧位置,或者重新创建活动但不更改项目的位置并恢复我的旧位置。这是我的密码。我该把什么放在哪里?!如果有人来帮忙,那就太好了。 谢谢 我的活动

这就是我的问题,我只有一个活动,从我启动我的viewpager片段开始,在我的viewpager中,我有4个包含recyclerViews的片段。每个片段都包含由网络上的数据填充的项目,当我点击其中一个时,我会得到一个WebView片段,但当我点击backbutton时,我丢失了Positon,因为它正在重新创建整个活动

我不知道如何不重新创建活动并恢复我的旧位置,或者重新创建活动但不更改项目的位置并恢复我的旧位置。这是我的密码。我该把什么放在哪里?!如果有人来帮忙,那就太好了。 谢谢

我的活动课:

public class LauncherActivity extends AppCompatActivity implements ListFragment.OnNewSelectedInterface{

    public static final String VIEWPAGER_FRAGMENT = "view_pager";
    private ImageView mImageView;

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

        RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.activity_launcher);
        mImageView = (ImageView) findViewById(R.id.logoImageView);

        mImageView.startAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate_indefinitely));

        if(!isNetworkAvailable()){

            alertUserAboutError();

        } else {
            relativeLayout.postDelayed(new Runnable() {
                @Override
                public void run() {

                    ViewPagerFragment savedFragment = (ViewPagerFragment)
                            getSupportFragmentManager().findFragmentByTag(VIEWPAGER_FRAGMENT);

                    if(savedFragment == null) {
                        ViewPagerFragment viewPagerFragment = new ViewPagerFragment();
                        FragmentManager fragmentManager = getSupportFragmentManager();
                        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                        fragmentTransaction.add(R.id.activity_launcher, viewPagerFragment, VIEWPAGER_FRAGMENT);
                        fragmentTransaction.addToBackStack(null);
                        fragmentTransaction.commit();
                    }
                }
            }, 2000);
        }
    }

    @Override
    public void onListNewSelected(int index, ArrayList<Articles> articles) {
        WebViewFragment webViewFragment = new WebViewFragment();
        Bundle bundle = new Bundle();
        bundle.putInt(ViewPagerFragment.KEY_NEW_INDEX, index);
        bundle.putParcelableArrayList(ListFragment.KEY_LIST, articles);
        webViewFragment.setArguments(bundle);
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.activity_launcher, webViewFragment, WebViewFragment.WEBVIEWFRAGMENT);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }

    private boolean isNetworkAvailable() {
        ConnectivityManager manager = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();
        boolean isAvailable = false;
        if (networkInfo != null && networkInfo.isConnected()) {
            isAvailable = true;
        }
        return isAvailable;
    }

    private void alertUserAboutError() {
        AlertDialogFragment alertDialogFragment = new AlertDialogFragment();
        alertDialogFragment.show(getFragmentManager(), "error_dialog");
    }

}
public class ViewPagerFragment extends Fragment {

    public static final String KEY_NEW_INDEX = "key_new_index";
    private ViewPager mViewPager;
    private TabLayout mTabLayout;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        final View view = inflater.inflate(R.layout.fragment_view_pager, container, false);

        final OldFactFragment oldFactFragment = new OldFactFragment();

        final SportFragment sportFragment = new SportFragment();

        final BuzzFragment buzzFragment = new BuzzFragment();

        final NewsFragment newsFragment = new NewsFragment();

        mViewPager = (ViewPager) view.findViewById(R.id.viewPager);
        mTabLayout = (TabLayout) view.findViewById(R.id.tabLayout);
        mViewPager.setOffscreenPageLimit(4);


        mViewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                if(position == 0){
                    return oldFactFragment;
                } else if (position == 1) {
                    return newsFragment;
                } else if (position == 2){
                    return sportFragment;
                } else return buzzFragment;
            }

            @Override
            public CharSequence getPageTitle(int position) {
                if(position == 0){
                    return "Pastly";
                } else if (position == 1) {
                    return "politic";
                } else if (position == 2){
                    return "sport";
                } else return "buzz";
            }

            @Override
            public int getCount() {
                return 4;
            }

        });

        mTabLayout.setupWithViewPager(mViewPager);

        return view;
    }
}
public abstract class ListFragment extends Fragment {

    public static final String KEY_LIST = "key_list";

    public interface OnNewSelectedInterface {
        void onListNewSelected(int index, ArrayList<Articles> articles);
    }

    protected static final String TAG = ListFragment.class.getSimpleName();
    protected ArrayList<Articles> mArticlesList;
    protected ItemAdapter mArticleAdapter;
    protected RecyclerView mRecyclerView;
    protected OnNewSelectedInterface mListener;
    protected RecyclerView.LayoutManager mManager;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mListener = (OnNewSelectedInterface) getActivity();
        View view = inflater.inflate(R.layout.fragment_list, container, false);
        mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
        getInfos(getUrl());
        return view;
    }

    protected abstract String[] getUrl();

    private void getInfos(String[] url) {

        if (isNetworkAvailable()) {

            OkHttpClient client = new OkHttpClient();
            for (int i = 0; i < getUrl().length; i++) {
                Request request = new Request.Builder().url(url[i]).build();

                client.newCall(request).enqueue(new Callback() {

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {

                        try {
                            String jsonData = response.body().string();
                            if (response.isSuccessful()) {
                                Log.v(TAG, jsonData);

                                getMultipleUrls(jsonData);

                                getActivity().runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {

                                        getCurrentArticles(mArticlesList);
                                    }
                                });
                            } else {
                                alertUserAboutError();
                            }
                        } catch (IOException | JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onFailure(Call call, IOException e) {
                        getActivity().runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                alertUserAboutError();
                            }
                        });
                    }
                });
            }
        } else{
            alertUserAboutError();
        }

    }

    private void getMultipleUrls(String jsonData) throws JSONException {
        if (mArticlesList == null) {
            mArticlesList = getArticleForecast(jsonData);
        } else {
            mArticlesList.addAll(getArticleForecast(jsonData));
        }
    }

    private void getCurrentArticles(ArrayList<Articles> articles) {

        mArticleAdapter = new ItemAdapter(getActivity(), articles, mListener);

        mRecyclerView.setAdapter(mArticleAdapter);
        mManager = new LinearLayoutManager(getActivity());
        mRecyclerView.setLayoutManager(mManager);

    }

    private boolean isNetworkAvailable() {
        ConnectivityManager manager = (ConnectivityManager) getActivity().
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();
        boolean isAvailable = false;
        if (networkInfo != null && networkInfo.isConnected()) {
            isAvailable = true;
        }
        return isAvailable;
    }

    private void alertUserAboutError() {
        AlertDialogFragment alertDialogFragment = new AlertDialogFragment();
        alertDialogFragment.show(getActivity().getFragmentManager(), "error_dialog");
    }

    private ArrayList<Articles> getArticleForecast(String jsonData) throws JSONException {
        JSONObject forecast = new JSONObject(jsonData);
        JSONArray articles = forecast.getJSONArray("articles");

        ArrayList<Articles> listArticles = new ArrayList<>(articles.length());

        for (int i = 0; i < articles.length(); i++) {
            JSONObject jsonArticle = articles.getJSONObject(i);
            Articles article = new Articles();

            String urlImage = jsonArticle.getString("urlToImage");

            article.setTitle(jsonArticle.getString("title"));
            article.setDescription(jsonArticle.getString("description"));
            article.setImageView(urlImage);
            article.setArticleUrl(jsonArticle.getString("url"));

            listArticles.add(i, article);
        }

        return listArticles;
    }
}
我的ListFragment(ViewPager中4个片段的父类):

public class LauncherActivity extends AppCompatActivity implements ListFragment.OnNewSelectedInterface{

    public static final String VIEWPAGER_FRAGMENT = "view_pager";
    private ImageView mImageView;

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

        RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.activity_launcher);
        mImageView = (ImageView) findViewById(R.id.logoImageView);

        mImageView.startAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate_indefinitely));

        if(!isNetworkAvailable()){

            alertUserAboutError();

        } else {
            relativeLayout.postDelayed(new Runnable() {
                @Override
                public void run() {

                    ViewPagerFragment savedFragment = (ViewPagerFragment)
                            getSupportFragmentManager().findFragmentByTag(VIEWPAGER_FRAGMENT);

                    if(savedFragment == null) {
                        ViewPagerFragment viewPagerFragment = new ViewPagerFragment();
                        FragmentManager fragmentManager = getSupportFragmentManager();
                        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                        fragmentTransaction.add(R.id.activity_launcher, viewPagerFragment, VIEWPAGER_FRAGMENT);
                        fragmentTransaction.addToBackStack(null);
                        fragmentTransaction.commit();
                    }
                }
            }, 2000);
        }
    }

    @Override
    public void onListNewSelected(int index, ArrayList<Articles> articles) {
        WebViewFragment webViewFragment = new WebViewFragment();
        Bundle bundle = new Bundle();
        bundle.putInt(ViewPagerFragment.KEY_NEW_INDEX, index);
        bundle.putParcelableArrayList(ListFragment.KEY_LIST, articles);
        webViewFragment.setArguments(bundle);
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.activity_launcher, webViewFragment, WebViewFragment.WEBVIEWFRAGMENT);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }

    private boolean isNetworkAvailable() {
        ConnectivityManager manager = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();
        boolean isAvailable = false;
        if (networkInfo != null && networkInfo.isConnected()) {
            isAvailable = true;
        }
        return isAvailable;
    }

    private void alertUserAboutError() {
        AlertDialogFragment alertDialogFragment = new AlertDialogFragment();
        alertDialogFragment.show(getFragmentManager(), "error_dialog");
    }

}
public class ViewPagerFragment extends Fragment {

    public static final String KEY_NEW_INDEX = "key_new_index";
    private ViewPager mViewPager;
    private TabLayout mTabLayout;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        final View view = inflater.inflate(R.layout.fragment_view_pager, container, false);

        final OldFactFragment oldFactFragment = new OldFactFragment();

        final SportFragment sportFragment = new SportFragment();

        final BuzzFragment buzzFragment = new BuzzFragment();

        final NewsFragment newsFragment = new NewsFragment();

        mViewPager = (ViewPager) view.findViewById(R.id.viewPager);
        mTabLayout = (TabLayout) view.findViewById(R.id.tabLayout);
        mViewPager.setOffscreenPageLimit(4);


        mViewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                if(position == 0){
                    return oldFactFragment;
                } else if (position == 1) {
                    return newsFragment;
                } else if (position == 2){
                    return sportFragment;
                } else return buzzFragment;
            }

            @Override
            public CharSequence getPageTitle(int position) {
                if(position == 0){
                    return "Pastly";
                } else if (position == 1) {
                    return "politic";
                } else if (position == 2){
                    return "sport";
                } else return "buzz";
            }

            @Override
            public int getCount() {
                return 4;
            }

        });

        mTabLayout.setupWithViewPager(mViewPager);

        return view;
    }
}
public abstract class ListFragment extends Fragment {

    public static final String KEY_LIST = "key_list";

    public interface OnNewSelectedInterface {
        void onListNewSelected(int index, ArrayList<Articles> articles);
    }

    protected static final String TAG = ListFragment.class.getSimpleName();
    protected ArrayList<Articles> mArticlesList;
    protected ItemAdapter mArticleAdapter;
    protected RecyclerView mRecyclerView;
    protected OnNewSelectedInterface mListener;
    protected RecyclerView.LayoutManager mManager;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mListener = (OnNewSelectedInterface) getActivity();
        View view = inflater.inflate(R.layout.fragment_list, container, false);
        mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
        getInfos(getUrl());
        return view;
    }

    protected abstract String[] getUrl();

    private void getInfos(String[] url) {

        if (isNetworkAvailable()) {

            OkHttpClient client = new OkHttpClient();
            for (int i = 0; i < getUrl().length; i++) {
                Request request = new Request.Builder().url(url[i]).build();

                client.newCall(request).enqueue(new Callback() {

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {

                        try {
                            String jsonData = response.body().string();
                            if (response.isSuccessful()) {
                                Log.v(TAG, jsonData);

                                getMultipleUrls(jsonData);

                                getActivity().runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {

                                        getCurrentArticles(mArticlesList);
                                    }
                                });
                            } else {
                                alertUserAboutError();
                            }
                        } catch (IOException | JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onFailure(Call call, IOException e) {
                        getActivity().runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                alertUserAboutError();
                            }
                        });
                    }
                });
            }
        } else{
            alertUserAboutError();
        }

    }

    private void getMultipleUrls(String jsonData) throws JSONException {
        if (mArticlesList == null) {
            mArticlesList = getArticleForecast(jsonData);
        } else {
            mArticlesList.addAll(getArticleForecast(jsonData));
        }
    }

    private void getCurrentArticles(ArrayList<Articles> articles) {

        mArticleAdapter = new ItemAdapter(getActivity(), articles, mListener);

        mRecyclerView.setAdapter(mArticleAdapter);
        mManager = new LinearLayoutManager(getActivity());
        mRecyclerView.setLayoutManager(mManager);

    }

    private boolean isNetworkAvailable() {
        ConnectivityManager manager = (ConnectivityManager) getActivity().
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();
        boolean isAvailable = false;
        if (networkInfo != null && networkInfo.isConnected()) {
            isAvailable = true;
        }
        return isAvailable;
    }

    private void alertUserAboutError() {
        AlertDialogFragment alertDialogFragment = new AlertDialogFragment();
        alertDialogFragment.show(getActivity().getFragmentManager(), "error_dialog");
    }

    private ArrayList<Articles> getArticleForecast(String jsonData) throws JSONException {
        JSONObject forecast = new JSONObject(jsonData);
        JSONArray articles = forecast.getJSONArray("articles");

        ArrayList<Articles> listArticles = new ArrayList<>(articles.length());

        for (int i = 0; i < articles.length(); i++) {
            JSONObject jsonArticle = articles.getJSONObject(i);
            Articles article = new Articles();

            String urlImage = jsonArticle.getString("urlToImage");

            article.setTitle(jsonArticle.getString("title"));
            article.setDescription(jsonArticle.getString("description"));
            article.setImageView(urlImage);
            article.setArticleUrl(jsonArticle.getString("url"));

            listArticles.add(i, article);
        }

        return listArticles;
    }
}
公共抽象类ListFragment扩展了片段{
公共静态最终字符串KEY\u LIST=“KEY\u LIST”;
公共接口OnNewSelectedInterface{
void onListNewSelected(int索引、ArrayList文章);
}
受保护的静态最终字符串标记=ListFragment.class.getSimpleName();
受保护的阵列列表;
受保护项目适配器;
受保护的回收视图mRecyclerView;
受保护的无选择接口mListener;
受保护的RecyclerView.LayoutManager管理器;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
mListener=(OnNewSelectedInterface)getActivity();
视图=充气机。充气(R.layout.fragment\u列表,容器,false);
mRecyclerView=(RecyclerView)view.findviewbyd(R.id.RecyclerView);
getInfos(getUrl());
返回视图;
}
受保护的抽象字符串[]getUrl();
私有void getInfos(字符串[]url){
if(isNetworkAvailable()){
OkHttpClient=新的OkHttpClient();
for(int i=0;i
和我的ItemAdapter(适配器类):

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ArticleViewHolder> {

    private final ListFragment.OnNewSelectedInterface mListener;
    protected ArrayList<Articles> mArticlesList;
    protected Context mContext;
    private int mPosition;
    private int lastPosition = -1;


    public ItemAdapter(Context contexts, ArrayList<Articles> mArticleLi, ListFragment.OnNewSelectedInterface listener){
        mContext = contexts;
        mArticlesList = mArticleLi;
        mListener = listener;
    }

    @Override
    public ArticleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item_linear, parent, false);

        view.findViewById(R.id.textView).setSelected(true);
        ArticleViewHolder articleViewHolder = new ArticleViewHolder(view);
        articleViewHolder.setIsRecyclable(false);

        return articleViewHolder;
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public void onBindViewHolder(ArticleViewHolder holder, int position) {
        mPosition = position;
        holder.bindArticle(mArticlesList.get(position));
        setAnimation(holder.itemView, position);
        holder.mImageView.setClipToOutline(true);


    }

    private void setAnimation(View viewToAnimate, int position) {
        if (position > lastPosition) {
            Animation animation = AnimationUtils.loadAnimation(viewToAnimate.getContext(), android.R.anim.slide_in_left);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }

    @Override
    public int getItemCount() {
        return mArticlesList.size();
    }

    public class ArticleViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{

        private TextView mTitle, mArticle;
        private ImageView mImageView;

        private ArticleViewHolder(View itemView) {
            super(itemView);

            mTitle = (TextView) itemView.findViewById(R.id.textView);
            mArticle = (TextView) itemView.findViewById(R.id.showTextView);
            mImageView = (ImageView) itemView.findViewById(R.id.imageView2);

            itemView.setOnClickListener(this);
            itemView.setOnLongClickListener(this);
        }

        private void bindArticle(Articles article) {

            mTitle.setText(article.getTitle());
            mArticle.setText(article.getDescription());
            mArticle.setVisibility(View.INVISIBLE);
            Glide.with(mContext).load(article.getImageView()).into(mImageView);
        }


        @Override
        public void onClick(View view) {
            mListener.onListNewSelected(getLayoutPosition(), mArticlesList);
        }

        @Override
        public boolean onLongClick(View view) {

            String desc = mArticlesList.get(getAdapterPosition()).getDescription();
            mArticle.setVisibility(View.VISIBLE);
            mArticle.setText(desc);
            mArticle.postDelayed(new Runnable() {
                public void run() {
                    mArticle.setVisibility(View.INVISIBLE);
                }
            }, 3000);
            return true;
        }

    }
}
公共类ItemAdapter扩展了RecyclerView.Adapter{ 私有最终列表fragment.OnNewSelectedInterface mListener; 受保护的阵列列表; 保护上下文mContext; 私人投资; 拉斯波西私人酒店