我花了一整天的時間玩GreenDroid PagedView和PagedAdaptor創建多個屏幕,可以通過滑動(一個iPhone風格和Android主屏幕風格)。這是一個非常酷的效果,GreenDroid庫非常棒。所以..我可以得到這個工作的一個XML佈局(代碼如下),但我試圖做的是有三個不同的佈局的屏幕。我已經玩過並使用一種方法成功地工作,但我不確定我使用的方法是否會因每次方法調用時XML佈局的重複膨脹而導致問題。我會舉一些我試圖節省時間的例子。我希望有人讀到這個已經有了GreenDroid的經驗,並可以指引我朝着正確的方向發展。也許這也將幫助別人太..GreenDroid PagedView - 多個頁面(不同的佈局)的幫助.. Android SDK
這裏是我的代碼:
HomePageActivity.java
public class HomePageActivity extends GDActivity {
private static final int PAGE_COUNT = 3;
private final Handler mHandler = new Handler();
private PageIndicator mPageIndicator;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setActionBarContentView(R.layout.homepage_view); // container xml
final PagedView pagedView = (PagedView) findViewById(R.id.homepage_view);
pagedView.setOnPageChangeListener(mOnPagedViewChangedListener);
pagedView.setAdapter(new HomePageAdapter());
mPageIndicator = (PageIndicator) findViewById(R.id.page_indicator);
mPageIndicator.setDotCount(PAGE_COUNT);
setActivePage(pagedView.getCurrentPage());
}
private void setActivePage(int page) {
mPageIndicator.setActiveDot(page);
}
private OnPagedViewChangeListener mOnPagedViewChangedListener = new OnPagedViewChangeListener() {
@Override
public void onStopTracking(PagedView pagedView) {
}
@Override
public void onStartTracking(PagedView pagedView) {
}
@Override
public void onPageChanged(PagedView pagedView, int previousPage, int newPage) {
setActivePage(newPage);
}
};
private class HomePageAdapter extends PagedAdapter {
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
Log.i("getView","ConvertView is null");
convertView = getLayoutInflater().inflate(R.layout.homepage_one, parent, false);
}
Log.i("getView Page",Integer.toString(position));
return convertView;
}
}
的兩行:
Log.i("getView","ConvertView is null");
Log.i("getView Page",Integer.toString(position));
我使用的調試這個來看看發生了什麼。 LogCat,所以我可以試驗。
第一行顯示一次 - 第一次創建應用程序。我注意到,非常偶然地,當我滑過頁面時(我有三個 - 通過變量PAGE_COUNT在頂部設置),在30-50次刷新之後,我將再次看到此消息。這表明這個佈局只有一次膨脹 - 對於所有屏幕。
我每次換頁時自然會看到第二行。在這種特殊情況下,整數位置是0,1或2。
XML佈局homepage_one是一個帶有三個TextView的簡單佈局。 XML佈局homepage_view是這些頁面的容器。
homepage_view.xml
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:greendroid="http://schemas.android.com/apk/res/com.cyrilmottier.android.gdcatalog">
<greendroid.widget.PagedView
android:id="@+id/homepage_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/splash" />
<greendroid.widget.PageIndicator
android:id="@+id/page_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center_horizontal"
android:paddingTop="10dp" />
當然,我已經嘗試了一些明顯的方法,比如這個:(其作品被通緝)
public View getView(int position, View convertView, ViewGroup parent) {
if (position == 0) {
convertView = getLayoutInflater().inflate(R.layout.homepage_one, parent, false);
} else if(position == 1){
convertView = getLayoutInflater().inflate(R.layout.homepage_two, parent, false);
} else {
convertView = getLayoutInflater().inflate(R.layout.homepage_three, parent, false);
}
return convertView;
}
這按預期工作。每個屏幕都是我想要的。在測試過程中,我沒有注意到任何性能問題,但是在原始實例中,我們只是誇大佈局ONCE值得注意。當這個方法被調用時(每當頁面發生變化時,我們再次膨脹佈局,這似乎並不足夠,但這又是我第一週使用Android開發,我不知道架構如何工作。 (只是閱讀,閱讀,閱讀和測試,測試,測試) - 所以我希望聽到更多有經驗和知識淵博的開發人員的意見,這可能是可以接受的..我想聽聽您的意見。我試過這樣:
public View getView(int position, View convertView, ViewGroup parent) {
if (PAGE_ONE == false && position == 0) {
convertView = getLayoutInflater().inflate(R.layout.homepage_one, parent, false);
PAGE_ONE = true;
} else if(PAGE_TWO == false && position == 1){
convertView = getLayoutInflater().inflate(R.layout.homepage_two, parent, false);
PAGE_TWO = true;
} else if(PAGE_THREE == false && position == 2){
convertView = getLayoutInflater().inflate(R.layout.homepage_three,parent, false);
PAGE_THREE = true;
}
return convertView;
}
PAGE_ONE,PAGE_TWO,PAGE_THREE在班上私人布爾設置=假這背後的考慮是,我們只充氣佈局一次和所有其他調用此方法簡單地返回一個已經膨脹的xml佈局。不幸的是,這使我的模擬器和我的手機(HTC EVO 3D)崩潰。正如Jay-Z所說,在下一個...
任何想法傢伙?