- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我花了一整天时间使用 GreenDroid PagedView 和 PagedAdaptor 来创建可以滑动浏览的多个屏幕(一种 iPhone 风格和 Android 主屏幕风格)。这是一个非常酷的效果,而且 GreenDroid 库很棒。 Soo.. 我可以为一个 XML 布局(下面的代码)工作,但我想要做的是拥有三个具有不同布局的屏幕。我试过并使用一种方法使其成功运行,但我不确定我使用的方法是否会由于每次方法调用时 XML 布局的重复膨胀而导致问题。我将举一些我试图节省时间的例子。我希望有人读过这篇文章,并且有过 GreenDroid 的经验,可以为我指明正确的方向。也许这也会帮助其他人......
这是我的代码:
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 次滑动后我会再次看到此消息。这表明此布局仅 INFLATED 一次 - 对于所有屏幕。
第二行我每次换页时自然会看到。在此特定情况下,整数位置为 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;
}
这按预期工作。每个屏幕都不同,因为我想要。我在测试期间没有注意到任何性能问题,但值得注意的是在原始实例中我们只膨胀布局一次。当调用此方法时(每次页面更改时,我们都会再次膨胀布局。这似乎资源不足,但话又说回来,这是我进行 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 在类中设置为 private boolean = false。这背后的考虑是我们只膨胀布局一次,每次调用此方法都只返回已经膨胀的 xml 布局。不幸的是,这会使我的模拟器和手机 (HTC EVO 3D) 崩溃。正如 Jay-Z 所说,进入下一个......
有什么想法吗?
最佳答案
GreenDroid 的PagedView
通常用于显示大量页面。它可以被认为是一个水平分页的 ListView
。这就是为什么使用它非常接近于常见的 ListAdapter
的原因。
在您的例子中,您希望在内存中保留三个页面。这是完全可能的,但不推荐这样做,因为您会阻止 PagedView
回收您的页面,并且还会增加内存中 View
的数量。
只有 3 个页面(具有相对平坦和狭窄的 View
层次结构)就可以了。一种更好的方法是延迟初始化页面并在每个页面上保留一个引用。
private static final int PAGE_COUNT = 3;
private View[] mPages = new View[PAGE_COUNT];
public View getView(int position, View convertView, ViewGroup parent) {
if (mPages[position] == null) {
View page = createPageAtPosition(position, parent);
mPages[position] = page;
}
return mPages[position];
}
当然,您的日志中可能会有警告,因为 PagedView
会在 convertView 未被重用时通知开发人员。
关于java - GreenDroid PagedView - 多页(不同布局)帮助.. Android SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7944032/
我刚刚将 GreenDroid 库添加到我的应用程序中。我用 GDActivity 扩展了 startview 并添加了 NFFApplication 并添加到应用程序标签 android:name=
我正在尝试导入并运行 GreenDroid 项目:https://github.com/cyrilmottier/GreenDroid 但出现以下错误: The type java.lang.Enum
请问我如何将 greendroid 库与 MapActivity 一起使用 public class GreendroidTestActivity extends GDActivity Map
当我安装 GreenDroid 库时,eclipse 给了我两个错误,一个在 greendroid.app.GDActivity 中,一个在 greendroid.app.GDTabActivity
当我尝试使用 GreenDroid 制作一个 Android 应用程序时,我将代码放在那里但它要求一个 ; 而已经有一个。 因为人们要求完整的代码,特此完整的代码! import greendroid
我正在搜索该 Activity 类的任何简单实现。 最佳答案 我会在这里回答我自己的解决方案 import greendroid.app.GDExpandableListActivity; impor
你们知道关于如何在 Windows 上的 Eclipse 中使用上述框架之一的教程吗?我已经下载了它们并按照说明进行操作 - 但在这两种情况下我仍然遇到错误。挫败感。 最佳答案 我刚刚在 Action
关于 GreenDroid 库 https://github.com/cyrilmottier/GreenDroid : 我想在操作栏中设置一个 Logo 作为标题。我尝试了几种方法但没有结果。我应该
DroidFu和 GreenDroid是很棒的开源项目,我想在我的 Android 项目中使用它们。但是,我在尝试让它们同时工作时遇到了问题。 这两个库都要求应用程序分别派生自它们的基础应用程序类 D
我正在尝试将 GreenDroid 添加到现有项目中,但我无法弄明白。 The instructions weren't very helpful. 我可以使用以下方法下载它:VCS>从版本控制>Gi
我花了一整天时间使用 GreenDroid PagedView 和 PagedAdaptor 来创建可以滑动浏览的多个屏幕(一种 iPhone 风格和 Android 主屏幕风格)。这是一个非常酷的效
有两个很棒的 Android UI 库 Greendroid 和 Actionbarsherlock。我想知道我什么时候可以使用它们,我需要这些的场景。两个库都提供相同的功能主义者吗? 最佳答案 您不
我得到一个类转换异常 java.lang.ClassCastException: android.app.Application 无法转换为 greendroid.app.GDApplication
我是一名优秀的程序员,十分优秀!