繁体   English   中英

Android Java Viewpager在相同的viewPager视图位置加载

[英]Android Java Viewpager loads in the same viewPager view position

我是Java / Android编程的新手。

我有一个带有tabLayout和viewPager的片段。 该片段从服务器获取了groupId / groupName的列表,然后需要为每个groupId创建一个页面。 它将值发送到适配器(在viewpager页面中显示的片段始终是ContentRoster(),但groupId定义了要显示的数据)

我的问题是,此ContentRoster()片段仅加载到viewpager的位置0中。 我可以按期望的方式滑动和滑动选项卡,但是所有负载都在同一视图中...

如果我有两组groupId,则第一个将在位置0加载,然后第二个groupId#2(将自动加载以填充下一个视图)更新位置0视图并擦除groupID#1视图。

    protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
        super.onPostExecute(result);

        TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.tabLayout);
        final ViewPager viewPager = (ViewPager) getActivity().findViewById(R.id.viewPager);
        tabLayout.setupWithViewPager(viewPager);

        AdapterViewPager mCustomPagerAdapter = new AdapterViewPager(getChildFragmentManager());

        //add Fragment with specific arguments
        for(int i = 0; i < result.size() ; i++) {
            mCustomPagerAdapter.addFragment(new ContentRoster(), (result.get(i)).get("groupname"), (result.get(i)).get("groupid") );
        }

        //Set adapter if not null
        if (viewPager != null) {
            viewPager.setAdapter(mCustomPagerAdapter);
            viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        }

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                if (viewPager != null) {
                    Log.i("#TAB_POS", "" + tab.getPosition());
                    viewPager.setCurrentItem(tab.getPosition());
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                if (viewPager != null) {
                    Log.i("#TAB_POS", "" + tab.getPosition());
                    viewPager.setCurrentItem(tab.getPosition());
                }
            }
        });

    }

适配器如下所示:

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

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

public class AdapterViewPager extends FragmentPagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    private final List<String> mFragmentParamsList = new ArrayList<>();

    public void addFragment(Fragment fragment, String title, String params) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
        mFragmentParamsList.add(params);
    }

    public AdapterViewPager(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        String groupId = mFragmentParamsList.get(position);
        Fragment fragment = ContentRoster.newInstance(groupId);
        return fragment;
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }

}

ContentRoster()片段是这样的:我从包中检索groupId,并且'LoadRosterList()。execute(groupId)'对数据进行充电,并仅显示与所选选项卡一致的groupId数据。

   public static ContentRoster newInstance(String groupId) {
        ContentRoster ContentRoster = new ContentRoster();

        Bundle args = new Bundle();
        args.putString("groupId", groupId);
        ContentRoster.setArguments(args);

        return ContentRoster;
    }

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

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

        Bundle args = getArguments();
        groupId = args.getString("groupId");

        progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
        new LoadRosterList().execute(groupId);

        return view;
    }

更新:这可以链接到我更新ContentRoster片段中的listview的最后一部分(在viewPager中显示),当我从活动中获取listview ID时?

protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
    super.onPostExecute(result);

    try {
        // Getting adapter by passing xml data ArrayList
        ListView mListView;
        mListView = (ListView) getActivity().findViewById(R.id.listView);

        AdapterRoster adapter = new AdapterRoster(getActivity().getApplicationContext(), result);
        mListView.setAdapter(adapter);
        adapter.notifyDataSetChanged();

        progressBar.setVisibility(View.GONE); //Effacage du Progress Bar

        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id){
                // Send intent to SingleViewActivity
                Intent i = new Intent(getActivity().getApplicationContext(), ActivitySingleGuardian.class);
                // Pass image index
                i.putExtra("psnid", ((TextView) v.findViewById(R.id.psnid)).getText().toString());
                i.putExtra("rank", ((TextView) v.findViewById(R.id.rank)).getText().toString());
                i.putExtra("lastplay", ((TextView) v.findViewById(R.id.lastplay)).getText().toString());
                i.putExtra("bungiename", ((TextView) v.findViewById(R.id.bungiename)).getText().toString());
                i.putExtra("bungieid", ((TextView) v.findViewById(R.id.bungieid)).getText().toString());
                i.putExtra("picpath", ((TextView) v.findViewById(R.id.picpath)).getText().toString());
                i.putExtra("membershipType", ((TextView) v.findViewById(R.id.membershipType)).getText().toString());
                startActivity(i);
            }
        });

    } catch (NullPointerException e) {
        e.printStackTrace();
    }
}

好了,您已经接近了,但还没到那儿。

在您的onPostExecute方法中,考虑将最后一行从以下位置更改:

viewPager.setAdapter(mCustomPagerAdapter);

像这样:

if (viewPager != null) {
        viewPager.setAdapter(mCustomPagerAdapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
}
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        if (viewPager != null) {
            viewPager.setCurrentItem(tab.getPosition());
        }
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {

    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {
        if (viewPager != null) {
            viewPager.setCurrentItem(tab.getPosition());
        }
    }
});

这也会导致删除此行(更像是移动并添加到该行):

tabLayout.addOnTabSelectedListener(onTabSelectedListener(viewPager));

希望这可以帮助!

终于找到了问题! 这是我的最后一部分,当我在作为viewPager一部分的ContentRoster()片段内调用适配器时!

我正在使用:mListView =(ListView)getActivity()。findViewById(R.id.listView);

而不是:mListView =(ListView)getView()。findViewById(R.id.listView);

现在,该列表显示在正确的位置!

谢谢大家!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM