文件名:page.xml
<listview
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</relativelayout>
文件名:listviewitem.xml
<textview
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="hello"
android:textcolor="#00ff00"
/>
<imageview
android:id="@+id/imageview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
/>
</linearlayout>
import java.util.arraylist;
import java.util.hashmap;
import java.util.list;
import java.util.map;
import android.app.activity;
import android.graphics.color;
import android.os.bundle;
import android.os.parcelable;
import android.support.v4.view.pageradapter;
import android.support.v4.view.viewpager;
import android.support.v4.view.viewpager.onpagechangelistener;
import android.util.log;
import android.view.layoutinflater;
import android.view.menu;
import android.view.view;
import android.view.viewgroup;
import android.view.viewparent;
import android.widget.arrayadapter;
import android.widget.button;
import android.widget.listview;
import android.widget.relativelayout;
import android.widget.simpleadapter;
public class pageractivity extends activity {
viewpager viewpager;
arraylist<view> pagesarraylist;// 添加listview 然后传给mypageradapter 充当媒介
string[] strs;
string[] strs2;
listview listview;
button button1;
button button2;
button button3;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_pager);
iniparams();
iniviews();
}
private void iniparams(){
pagesarraylist=new arraylist<view>();
strs=new string[]{"a","b","c","a","b","c","a","b","c"};
strs2=new string[]{"1","2","3","1","2","3","1","2","3"};
}
private void iniviews(){
viewpager=(viewpager)findviewbyid(r.id.viewpager);
//第一个页面的viewpager第1个page里的listview
layoutinflater layoutinflater=getlayoutinflater();
listview=(listview)
(layoutinflater.inflate(r.layout.page,null).findviewbyid(r.id.listview));
arrayadapter<string> arrrayadapter=new arrayadapter<string>(this,android.r.layout.simple_list_item_1,strs);
listview.setadapter(arrrayadapter);
pagesarraylist.add(listview);
//第个页面的viewpager第2个page里的listview
listview=(listview)
(layoutinflater.inflate(r.layout.page,null).findviewbyid(r.id.listview));
arrayadapter<string> arrrayadapter2=new arrayadapter<string>(this,android.r.layout.simple_list_item_1,strs2);
listview.setadapter(arrrayadapter2);
pagesarraylist.add(listview);
//第三个面的viewpager第3个page里的listview
simpleadapter simpleadapter3=new simpleadapter(this,getdatasforlistview(),
r.layout.listviewitem,new string[]{"title","image"},new int[]{r.id.textview,r.id.imageview});
listview=(listview)
(layoutinflater.inflate(r.layout.page, null).findviewbyid(r.id.listview));
listview.setadapter(simpleadapter3);
pagesarraylist.add(listview);
viewpager.setadapter(new mypageradapter(pagesarraylist));
viewpager.setonpagechangelistener(new myonpagechangelistener());
viewpager.setcurrentitem(0);
button1=(button)findviewbyid(r.id.button1);
button2=(button)findviewbyid(r.id.button2);
button3=(button)findviewbyid(r.id.button3);
}
public list<map<string, object>> getdatasforlistview(){
log.e("3", "");
list<map<string, object>> listmaps=new arraylist<map<string,object>>();
string[] strings=new string[]{"图片1","图片2","图片3"};
int[] images=new int[]{r.drawable.p1,r.drawable.p1,r.drawable.p1};
for(int i=0;i<strings.length;i++){
listmaps.add(listviewitemfactory.generate(new object[]{strings[i],images[0]}));
}
return listmaps;
}
static class listviewitemfactory{
static map<string,object> generate(object[] obj){
map<string,object> map=new hashmap<string, object>();
map.put("title", obj[0]);
map.put("image",obj[1]);
return map;
}
}
@override
public boolean oncreateoptionsmenu(menu menu) {
// inflate the menu; this adds items to the action bar if it is present.
getmenuinflater().inflate(r.menu.pager, menu);
return true;
}
public class mypageradapter extends pageradapter {
public list<view> mlistviews;
public mypageradapter(list<view> mlistviews) {
this.mlistviews = mlistviews;
}
@override
public void destroyitem(view arg0, int arg1, object arg2) {
log.d("destroyitem", ""+arg0+" "+arg1);
((viewpager) arg0).removeview(mlistviews.get(arg1));
}
@override
public int getcount() {
return mlistviews.size();
}
@override
public object instantiateitem(view arg0, int arg1) {
log.d("instantiateitem", ""+arg0+" "+arg1);
try {
if(mlistviews.get(arg1).getparent()==null)
((viewpager) arg0).addview(mlistviews.get(arg1), 0);
else{
// 很难理解新添加进来的view会自动绑定一个父类,由于一个儿子view不能与两个父类相关,所以得解绑
//不这样做否则会产生 viewpager java.lang.illegalstateexception: the specified child already has a parent. you must call removeview() on the child's parent first.
// 还有一种方法是viewpager.setoffscreenpagelimit(3); 这种方法不用判断parent 是不是已经存在,但多余的listview不能被destroy
((viewgroup)mlistviews.get(arg1).getparent()).removeview(mlistviews.get(arg1));
((viewpager) arg0).addview(mlistviews.get(arg1), 0);
}
} catch (exception e) {
// todo auto-generated catch block
log.d("parent=", ""+mlistviews.get(arg1).getparent());
e.printstacktrace();
}
return mlistviews.get(arg1);
}
@override
public boolean isviewfromobject(view arg0, object arg1) {
return arg0 == (arg1);
}
@override
public void restorestate(parcelable arg0, classloader arg1) {
}
@override
public parcelable savestate() {
return null;
}
@override
public void startupdate(view arg0) {
}
}
class myonpagechangelistener implements onpagechangelistener{
@override
public void onpagescrollstatechanged (int state){
// todo auto-generated method stub
}
@override
public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels) {
// todo auto-generated method stub
}
color precolor;
@override
public void onpageselected(int position) {
// todo auto-generated method stub
log.d("page", "pos="+position);
switch(position)
{
case 0: //button1.setbackgroundcolor(0x00ff00);break;
case 1:// button1.setbackgroundcolor(0xff0000);break;
case 2:
}
}
}
}
如对本文有疑问, 点击进行留言回复!!
Codeforces C. A Cookie for You (模拟 / 分类 / 贪心) (Round #654 Div.2)
DialogFragment弹窗(带黑色透明背景和不带黑色透明背景)
网友评论