我试图在示例项目中包含此代码,并且运行良好.@H_301_7@现在我在VIEwPager的一个片段中有一个ListVIEw,在另外两个片段中有一个简单的TextVIEw.它正在发挥作用.
VIEwPagerAdapter代码如下所示:
package com.formatbce.pager;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import androID.content.Context;import androID.os.Parcelable;import androID.support.v4.vIEw.PagerAdapter;import androID.support.v4.vIEw.VIEwPager;import androID.vIEw.VIEw;import androID.Widget.AbsListVIEw;import androID.Widget.AbsListVIEw.OnScrollListener;import androID.Widget.ListVIEw;import androID.Widget.SimpleAdapter;import androID.Widget.TextVIEw;import com.vIEwpagerindicator.TitleProvIDer;public class VIEwPagerAdapter extends PagerAdapterimplements TitleProvIDer{ private int[] scrollposition = new int[Titles.length];private static String[] Titles = new String[]{ "News","Bio","Music"};private final Context context;public VIEwPagerAdapter( Context context ){ this.context = context; for ( int i = 0; i < Titles.length; i++ ) { scrollposition[i] = 0; }}@OverrIDepublic String getTitle( int position ){ return Titles[ position ];}@OverrIDepublic int getCount(){ return Titles.length;}@OverrIDepublic Object instantiateItem( VIEw pager,final int position ){ if (position == 0) { ListVIEw v = new ListVIEw( context ); String[] from = new String[] { "str" }; int[] to = new int[] { androID.R.ID.text1 }; List<Map<String,String>> items = new ArrayList<Map<String,String>>(); for ( int i = 0; i < 20; i++ ) { Map<String,String> map = new HashMap<String,String>(); map.put( "str",String.format( "Item %d",i + 1 ) ); items.add( map ); } SimpleAdapter adapter = new SimpleAdapter( context,items,androID.R.layout.simple_List_item_1,from,to ); v.setAdapter( adapter ); ( (VIEwPager) pager ).addVIEw( v,0 ); v.setonScrollListener( new OnScrollListener() { @OverrIDe public voID onScroll( AbsListVIEw vIEw,int firstVisibleItem,int visibleItemCount,int totalitemCount ) { scrollposition[ position ] = firstVisibleItem; } @OverrIDe public voID onScrollStateChanged(AbsListVIEw vIEw,int scrollState) { // Todo auto-generated method stub } } ); return v;} else { TextVIEw v = new TextVIEw( context ); v.setText( Titles[ position ] ); ((VIEwPager)pager).addVIEw( v,0 ); return v; }}@OverrIDepublic voID destroyItem( VIEw pager,int position,Object vIEw ){ if (position == 0){ ( (VIEwPager) pager ).removeVIEw( (ListVIEw) vIEw );} else { ( (VIEwPager) pager ).removeVIEw( (TextVIEw) vIEw );}}@OverrIDepublic boolean isVIEwFromObject( VIEw vIEw,Object object ){ return vIEw.equals( object );}@OverrIDepublic voID finishUpdate( VIEw vIEw ) {}@OverrIDepublic voID restoreState( Parcelable p,ClassLoader c ) {}@OverrIDepublic Parcelable saveState() { return null;}@OverrIDepublic voID startUpdate( VIEw vIEw ) {}}
因此,使用ListVIEw示例一切都很好.
但是当我尝试将自定义ListVIEw放在那里时,我的问题就开始了.在我的旧项目中,这个ListVIEw有代码:
package com.formatbce.mdrive;import java.util.ArrayList;import androID.app.AlertDialog;import androID.app.ListActivity;import androID.app.ProgressDialog;import androID.content.Context;import androID.content.DialogInterface;import androID.content.Intent;import androID.os.AsyncTask;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.Widget.ListVIEw;public class Concerts extends ListActivity {private ArrayList<RSS_PostItem> messages;private RSS_PostAdapter adapter;@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { messages = savedInstanceState.getParcelableArrayList("messages"); adapter = new RSS_PostAdapter(Concerts.this,R.layout.post_entry,messages); setlistadapter(adapter); } else new GetParserResult().execute();}@OverrIDeprotected voID onListItemClick(ListVIEw l,VIEw v,long ID) { super.onListItemClick(l,v,position,ID); Intent postActivity = new Intent(this,RSS_PostActivity.class); Bundle store = new Bundle(); store.putString("Title",messages.get(position).Title); store.putString("description",messages.get(position).description); store.putString("link",messages.get(position).link); postActivity.putExtras(store); startActivity(postActivity);}protected voID onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putParcelableArrayList("messages",messages);}private class GetParserResult extends AsyncTask<Context,Integer,ArrayList<RSS_PostItem>> { private ProgressDialog loadingDialog; private Concerts_Parser parser; protected voID onPreExecute() { parser = new Concerts_Parser(); loadingDialog = ProgressDialog.show(Concerts.this,"","Loading concerts List...",true); } @OverrIDe protected ArrayList<RSS_PostItem> doInBackground(Context... arg0) { return parser.parse(); } protected voID onPostExecute(ArrayList<RSS_PostItem> result) { if (result == null) { AlertDialog.Builder builder = new AlertDialog.Builder( Concerts.this); builder.setMessage( "Cannot load List... \nIs Internet ON?") .setCancelable(false) .setPositivebutton("Ok",new DialogInterface.OnClickListener() { public voID onClick(DialogInterface dialog,int ID) { dialog.cancel(); loadingDialog.dismiss(); } }); AlertDialog alert = builder.create(); alert.show(); } else { messages = result; loadingDialog.dismiss(); adapter = new RSS_PostAdapter(Concerts.this,messages); setlistadapter(adapter); } }} }
所以我不明白,如何在VIEwPager代码中正确使用它.@H_301_7@我尝试设置ListFragment,但对我来说这是一个非常新的,所以我无法让它工作.
Google也无法帮助我,就像各种开发人员论坛一样.
确实,问题是:如何在VIEwPager中显示自定义ListVIEw?
谢谢,我希望你能得到帮助.
UPD:
感谢第一个答案,我尝试将我的一个活动转换为片段,使用本教程:http://www.e-nature.ch/tech/?p=55.
首先,这是一个我无法通过的错误:这个变量没有转换,我不知道,如何让它工作.
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
现在另外一件事:当我试图将结果片段放到FragmentPagerAdapter时 – 我在这里找不到正确的代码:
@OverrIDepublic Fragment getItem(int arg0) { // Todo auto-generated method stub return ?????????;}
请告诉我,这种方法必须返回什么?@H_301_7@谢谢!
解决方法 你说i have one TabHost with three tabs,and different ListVIEw in each tab
我假设你有三个不同的ListActivity,它传递给tabHost.所以将三个活动转换为三个碎片.
根据以下示例代码更改您的VIEwPagerAdapter
class GoogleMusicAdapter extends FragmentPagerAdapter implements TitleProvIDer { public GoogleMusicAdapter(FragmentManager fm) { super(fm); } @OverrIDe public Fragment getItem(int position) { if(position ==0 ) // return your Fragment1 else if(position==1) // return your Fragment2 else // return fragment3 } @OverrIDe public int getCount() { return 3; } @OverrIDe public String getTitle(int position) { if(position ==0 ) return "One" else if(position ==1) return "two" else return "three" }}@H_403_2@ 总结
以上是内存溢出为你收集整理的android – ViewPager指标与自定义ListView全部内容,希望文章能够帮你解决android – ViewPager指标与自定义ListView所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)