【发布时间】:2018-08-08 13:52:04
【问题描述】:
CategoryPagerAdapter.class
public class CategoryPagerAdapter extends FragmentPagerAdapter {
private Context context;
private String tabs[] = {"Text","Images","Videos"};
public CategoryPagerAdapter(Context context, FragmentManager fm) {
super(fm);
this.context = context;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return tabs[position];
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
Fragment textFragment = new CategoryFragment();
Bundle args = new Bundle();
args.putString("TEXT","textFragment");
textFragment.setArguments(args);
return textFragment;
case 1:
Fragment imageFragment = new CategoryFragment();
Bundle args1 = new Bundle();
args1.putString("IMAGE","imageFragment");
imageFragment.setArguments(args1);
return imageFragment;
case 2:
Fragment videoFragment = new CategoryFragment();
Bundle args2 = new Bundle();
args2.putString("VIDEO","videoFragment");
videoFragment.setArguments(args2);
return videoFragment;
}
return null;
}
@Override
public int getCount() {
return tabs.length;
}
}
CategoryGridViewAdapter.class 这是我想在选择不同选项卡时显示不同数据的 gridview 类。
public class CategoryGridViewAdapter extends BaseAdapter {
private Context context;
public CategoryGridViewAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return 20;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.adapter_category, parent, false);
}
return convertView;
}
}
CategoryFragment.class 这是片段类,可以相同。
public class CategoryFragment extends Fragment {
Context context;
GridView gv_categories;
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Bundle args = getArguments();
String key = args.getString("TEXT");
if(key.equals("TEXT")){
view = inflater.inflate(R.layout.fragment_category, container, false);
context = view.getContext();
gv_categories = view.findViewById(R.id.gv_categoryGridView);
CategoryGridViewAdapter categoryGridViewAdapter = new CategoryGridViewAdapter(context);
gv_categories.setAdapter(categoryGridViewAdapter);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
gv_categories.setNestedScrollingEnabled(true);
}
gv_categories.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent textStatusIntent = new Intent(context, TextStatus.class);
textStatusIntent.putExtra("text",""+position);
context.startActivity(textStatusIntent);
}
return view;
}
}
【问题讨论】:
-
您只需将数据列表传递给您的适配器类,除了一切看起来都很好。请详细说明您想做什么。
-
我也收到错误 - java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on an null object reference at com .sharestatus.fragment.CategoryFragment.onCreateView(CategoryFragment.java:42) stackoverflow.com/users/3503023/krishna-sharma
-
解决 NPE 像这样改变你的代码 Bundle args = getArguments();
if(args.contains("TEXT")){ } else if(args.contains("IMAGE")){ } else if(args.contains("VIDEO")){ }
标签: android android-fragments gridview adapter android-tablayout