【发布时间】:2017-06-05 13:56:22
【问题描述】:
我是 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 片段中更新列表视图的最后一部分(在 viewPager 中显示) 当我从活动中获取列表视图 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();
}
}
【问题讨论】:
标签: java android android-viewpager