我有一个包含产品详细信息的ListView。在列表视图的项目单击上,我打开具有特定产品详细信息的新活动。我想将活动转换为ViewPager,以便可以滑动以在同一片段中加载下一个和上一个记录。所有记录的片段结构都相同。我不知道我应该从哪里开始。您能否概述一下如何实现这一目标。这是我的模型课。
产品.java
public class Product implements Serializable{
public int id;
public String Name;
public String description;
public String longDescription;
public String amount;
public String image;
}
这是我的FragmentPagerAdapter类
ProductPagerAdapter.java
public class ProductPagerAdapter extends FragmentPagerAdapter {
private Context context;
private ArrayList<Product> list;
public ProductPagerAdapter(FragmentManager fm, Context context, ArrayList<Product> list) {
super(fm);
this.context = context;
this.list = list;
}
@Override
public Fragment getItem(int position) {
return ProductFragment.newInstance(position);
}
@Override
public int getCount() {
return list.size();
}
}
这是我的片段
ProductFragment.java
public class ProductFragment extends Fragment {
public ProductFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_product, container, false);
//findViewById...
return v;
}
public static Fragment newInstance(int id) {
Bundle args = new Bundle();
args.putInt("Id", id);
ProductFragment fragment = new ProductFragment();
fragment.setArguments(args);
return fragment;
}
}
现在在列表项上,单击我正在打开新活动。我正在向其发送产品对象。
lv_itemRateList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(getActivity(), DetailsActivity.class);
Product r = new Product();
r = rateListArrayList.get(i);
intent.putExtra("product",r);
startActivity(intent);
}
});
我的DetailsActivity包含我的viewpager。现在有人可以告诉我该怎么做吗?
1-)需要一个用于ViewPager的自定义适配器。
我假设所有页面都将具有相同的内容,所以所有页面都具有相同的布局,因此ProductPagerAdapter扩展了PagerAdapter。
public class ProductPagerAdapter extends PagerAdapter
{
//variables
private Context context;
private ArrayList<Product> list;
private Product product
//views
TextView txtName ;
public ProductPagerAdapter(Context context, List<Product> list)
{
this.context = context;
this.list = list;
}
@Override
public int getCount()
{
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object)
{
return view == ( object);
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
product = list.get(position);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.fragment_product, container,false);
txtName = (TextView) itemView.findViewById(R.id.txtName);
txtName.setText(product.Name)
((ViewPager) container).addView(itemView);
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
((ViewPager) container).removeView((LinearLayout) object);
}
}
2-)适配器已准备就绪。现在,让我们准备显示细节的活动。首先初始化ViewPager和ProductPagerAdapter。然后显示通过单击上一个活动选择的项目的详细信息。
public class DetailsActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
...
//getting product object
Intent intent = getIntent();
Product product = (Product) getIntent().getSerializableExtra("product");
//get selected item id
int selectedItemID = 0;
for(int i = 0 ; i < list.size() ; i++)
{
if(list.get(i).id == product.id)
{
selectedItemID = i;
break;
}
}
//Init ViewPager and adapter
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
ProductPagerAdapter detailAdapter = new ProductPagerAdapter(DetailActivity.this, list);
// Binds the Adapter to the ViewPager
viewPager.setAdapter(detailAdapter);
viewPager.setCurrentItem(selectedItemID); // set selection
viewPager.setPageTransformer(true, new ForegroundToBackgroundTransformer()); //custom transformer
...
}
}
3-)到目前为止,我们已经完成了必须要做的事情。因此它将像这样工作。但是我想指出的是,有一些事情可以使ViewPager变得更好。
性能:使用Parcelable而不是Serializable。Parcelable需要花费更多的时间来实现,但是它的执行速度将提高10倍,并且占用的资源更少。请检查此答案
动画:您可能需要动画来转换ViewPager。我建议您使用ViewPagerTransforms
指示器:如果要使用分页指示器,建议使用ViewPagerIndicator。
有关ViewPager的更多信息
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句