小编Gra*_*eme的帖子

片段onCreateView()包.它从何而来?

我通过常规方式开始活动:

Intent startIntent = new Intent(this, DualPaneActivity.class);
startIntent.putExtras(((SearchPageFragment) currentFragment).getPageState());
startActivity(startIntent);
Run Code Online (Sandbox Code Playgroud)

加载此活动时,它会将Fragment放在框架中,如下所示:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();   
Fragment currentFragment = fragment;
currentFragment.setArguments(getIntent().getExtras());
transaction.replace(R.id.singlePane, currentFragment);  
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

看似简单吧?

但是,您可以在onCreateView()方法内部访问三个单独的包(如果包含Fragment中包含的包,则为四个onCreate(Bundle savedInstanceState)):

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
    // Fill state information
    Bundle bundle;
    if(savedInstanceState != null)  bundle = savedInstanceState; // 1       
    else if(getArguments() != null) bundle = getArguments();     // 2
    else                            bundle = getActivity().getIntent().getExtras(); // 3
    setPageState(bundle);   
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我从试验中得出结论,我想要的包是第二个,从中检索到的包getArguments().

根据我的理解,第三个getActivity().getIntent().getExtras();实际上是从用于开始包含活动的意图中调用Bundle.我也从实验中知道savedInstanceState似乎总是空的.但它来自哪里,为什么它是空的?

该 …

android bundle

25
推荐指数
1
解决办法
2万
查看次数

你需要传递给v4.widget.DrawerLayout.isDrawerOpen()/.openDrawer()/.closeDrawer()

我一直在试图跨越到移动我的代码DrawerLayout作为由Android建议这里SlidingDrawer已经过时了.

我的问题是,到目前为止DrawerLayout似乎要么执行得非常糟糕,有无用的错误消息(没有防御性编程)和/或在文档中没有得到足够的解释.

这个isDrawerOpen()方法在这里描述:

public boolean isDrawerOpen(查看抽屉)

检查给定的抽屉视图当前是否处于打开状态.为了被视为"开放",抽屉必须已经稳定在其完全可见的状态.要检查部分可见性,请使用isDrawerVisible(android.view.View).

参数:drawer - 要检查的抽屉视图

返回:如果给定的抽屉视图处于打开状态,则返回true

每个方法isDrawerOpen(View drawer),openDrawer(View drawer)并且closeDrawer(View drawer)在传递时不起作用:DrawerLayout有问题或者其中任何一个的孩子.我不知道我应该为这些方法提供什么来让它们发挥作用.有人能告诉我吗?

有关实现,请参阅下面的整个问题描述.

我有这样的布局:

<android.support.v4.widget.DrawerLayout
    android:id="@+id/mainmenuPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/dualPane"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <FrameLayout
        android:id="@+id/menuPane"
        android:layout_width="300dp"
        android:layout_height="match_parent" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我将以下方法连接到一个按钮:

protected void onCreate(Bundle savedInstanceState) {    
    ...
    mMenuPanel = (DrawerLayout) findViewById(R.id.mainmenuPanel);
    ....
}

public boolean isDrawerOpen() {
    if(mMenuPanel != null) {
        return mMenuPanel.isDrawerOpen(mMenuPanel);
    }
    return false;
} …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer drawerlayout

24
推荐指数
2
解决办法
9310
查看次数

自定义可检查视图,响应选择器

我有一组FrameLayout我想要检查/选择,

也就是说,点击后我希望FrameLayout显示为checked- 当再次按下时,我希望它成为联合国checked.更重要的是,我希望通过使用a来像往常一样描述这个视觉阙<selector>.

我似乎无法让这个工作 - 我不确定我缺少什么:

public class CheckableFrameLayout extends FrameLayout implements Checkable {
    private boolean mChecked = false;
    public CheckableFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setChecked(boolean checked) {
        mChecked = checked;
        refreshDrawableState();
    }

    public boolean isChecked() {
        return mChecked;
    }

    public void toggle() {
        setChecked(!mChecked);
    }
}
Run Code Online (Sandbox Code Playgroud)

布局CheckableFrameLayout:

<com.test.view.CheckableFrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/selector_horizontal"
    android:clickable="true" >
Run Code Online (Sandbox Code Playgroud)

支持它的选择器(selector_horizo​​ntal.xml):

<item android:drawable="@drawable/selector_vertical_selected" android:state_pressed="false" android:state_checked="true"/>  
<item android:drawable="@drawable/selector_vertical_pressed" android:state_pressed="true" …
Run Code Online (Sandbox Code Playgroud)

android view custom-view

23
推荐指数
1
解决办法
1万
查看次数

片段 - 您是否必须在包含整个Activity的片段周围使用Activity Wrapper?

考虑来自developers.android.com的示例应用程序

这描述了像这样使用Fragments:

  • 在电话上,您可以在活动A上使用片段1,在活动B上使用片段2.
  • 在平板电脑上,你有更多的空间,所以你在活动A上使用片段1和片段2.

大!...但是......在第一个例子(带有电话的例子)中,您创建了一个活动,其中包含一个单独的xml文件,<fragment>而这只是setContentView()在您只在该xml上调用的活动中?这似乎是一个大量的冗余代码(活动,XML和片段显示片段):你可以设置一个Fragment作为Activity或不符合XML格式的包装总是需要?

android wrapper android-fragments android-activity

20
推荐指数
1
解决办法
1万
查看次数

Android NDK中的链接器错误(未定义引用`__cxa_end_cleanup')

在从同事添加一组代码后,我得到了这个输出:

./obj/local/armeabi/objs/jniWrapper/native.o: In function `_Vector_base':
D:/opt/android-ndk/sources/cxx-stl/stlport/stlport/stl/_vector.h:73: undefined reference to `__cxa_end_cleanup'
./obj/local/armeabi/objs/jniWrapper/native.o:(.ARM.extab.text._ZNSt6vectorIhSaIhEEC1ERKS1_[std::vector<unsigned char, std::allocator<unsigned char> >::vector(std::vector<unsigned char, std::allocator<unsigned char> > const&)]+0x0): undefined reference to `__gxx_personality_v0'
./obj/local/armeabi/objs/jniWrapper/native.o: In function `std::__node_alloc::deallocate(void*, unsigned int)':
D:/opt/android-ndk/sources/cxx-stl/stlport/stlport/stl/_alloc.h:161: undefined reference to `__cxa_end_cleanup'
./obj/local/armeabi/objs/jniWrapper/native.o:(.ARM.extab.text._ZNSt4priv12_String_baseIcSaIcEED2Ev[std::priv::_String_base<char, std::allocator<char> >::~_String_base()]+0x0): undefined reference to `__gxx_personality_v0'
./obj/local/armeabi/objs/jniWrapper/native.o: In function `basic_string':
D:/opt/android-ndk/sources/cxx-stl/stlport/stlport/stl/_string.c:643: undefined reference to `__cxa_end_cleanup'
Run Code Online (Sandbox Code Playgroud)

这是因为我无法访问正确的STL.

据我所知,只有三个,我可以从(选择stlport_static,stlport_shared,system)通过设置APP_STL := stlport_staticApplication.mk.

NDK还有另一个库可用吗?

android compiler-errors linker-errors android-ndk

19
推荐指数
1
解决办法
2万
查看次数

如何在保持纵横比的同时使图像尽可能大

我有一个比我想要的容器更小的图像.我希望图像能够拉伸,保持其纵横比,使其达到最大可能尺寸.

为了说明这个问题:

<ImageView  android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/thumbnail"
            android:scaleType="fitXY"
            android:adjustViewBounds="true"/>
Run Code Online (Sandbox Code Playgroud)

ImageView上述将被拉伸以填充所述容器的宽度.的@drawable含有还沿x轴拉伸它,以适应宽度的ImageView这是完美的.然而问题是标记的尺寸wrap_content(在这种情况下是高度)保持与@drawables初始高度相同的尺寸.

在这里阅读了有关ScaleType的文档,但那里找不到答案.

下图描述了上面的代码:

在此输入图像描述 在此输入图像描述

  Current behaviour               Desired Behaviour
Run Code Online (Sandbox Code Playgroud)

编辑

一个ImageViewGIVEN scaleType="fitCenter"将准确地扩大/收缩@drawable在它的内部,同时保持它的高宽比生长尽可能大.

ImageView之前的S尺寸被定义@drawable为以任何方式进行缩放.在ImageView中它包含尺寸标注不结垢影响@drawable.

android imageview android-layout

18
推荐指数
1
解决办法
5156
查看次数

如何使用windowIsFloating创建透明活动

windowIsFloating虽然一个伟大的一站式商店创建Dialog风格的UI有许多---错误---怪癖.

我现在正在努力的是它将顶部祖先的宽度/高度指定为"wrap_content"而不是屏幕的宽度/高度.这意味着使用的常用UI设计"match_parents"将向上传播成为"wrap_content".糟糕的时间.

所以,我真正想要的是创建一个活动,并有一个像这样的布局:

<LinearLayout   android:layout_height="wrap_content"
                android:layout_width="match_parent"
                android:orientation="vertical"
                android:id="@+id/containerPageConatiner"
                android:background="@drawable/windowBackground">
    <View           android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"/>
    <FrameLayout    android:id="@+id/singlePane"
                    android:layout_height="wrap_content"
                    android:layout_width="match_parent"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:padding="10dp"/>    
    <View           android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"/>                         
</LinearLayout> 
Run Code Online (Sandbox Code Playgroud)

这会生成一个UI,显示调用它的Activity上的单个窗口(@ id/singlePane).

有没有人拥有创建透明背景活动所需的恰当样式?

android android-layout

18
推荐指数
2
解决办法
1万
查看次数

修改联系信息

我正在尝试插入和更新现有联系人的一条信息,因此我创建了一个示例应用程序以开发功能.我希望我的示例应用程序执行的操作是插入(或者如果存在)更新联系人的电子邮件地址.

我正在通过系统Intent选择一个联系人,如下所示:

    startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST);
Run Code Online (Sandbox Code Playgroud)

返回的URI是Contact(RawContact?)的URI,它被选中并以这种形式出现: content://com.android.contacts/contacts/lookup/0r2-2A90214945/2.

我可以通过执行以下代码来撤回所有Data(RawContact?)项目:

Cursor cursor = contentResolver.query(mContactUri, null, null, null, null);
try {
    if (cursor.moveToFirst()) {
        for(int i=0; i < cursor.getColumnCount(); i++) {
            String message = cursor.getColumnName(i);
            Log.v("", message);
        }
    }
} finally {
    cursor.close();
}
Run Code Online (Sandbox Code Playgroud)

从这里我应该能够确定联系人是否已经有一个CommonDataTypes.Email Data成员:

cursor.getColumnIndex(CommonDataKinds.Email.CONTENT_ITEM_TYPE) != -1;
Run Code Online (Sandbox Code Playgroud)

然后执行以下的任一个InsertUpdate所述数据:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

ops.add(ContentProviderOperation.newInsert(mContactUri)
    .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
    .withValue(Email.DISPLAY_NAME, "somebody@android.com")
    .withValue(Email.TYPE, Email.TYPE_HOME)
    .build()); …
Run Code Online (Sandbox Code Playgroud)

android contactscontract android-contacts

18
推荐指数
1
解决办法
9207
查看次数

如何禁用SoftKeyboard键预览窗口?

创建自己的SoftKeyboard时,默认情况下会给出"键预览".

在此输入图像描述 在此输入图像描述

你怎么禁用这个?

编辑:

您可以keyPreview通过更改<KeyboardView>属性来自定义布局android:keyPreviewLayout.默认情况下,它会设置为查看keyboard_key_preview.xml:

编辑2: 跟随我成为红鲱鱼:

源代码建议提供0或不应用标记android:keyPreviewLayout将导致没有出现键预览:

    ...
    case com.android.internal.R.styleable.KeyboardView_keyPreviewLayout:
        previewLayout = a.getResourceId(attr, 0);
        break; 
    ...
    if (previewLayout != 0) {
        mPreviewText = (TextView) inflate.inflate(previewLayout, null);
        mPreviewTextSizeLarge = (int) mPreviewText.getTextSize();
        mPreviewPopup.setContentView(mPreviewText);
        mPreviewPopup.setBackgroundDrawable(null);
    } else {
        mShowPreview = false;
    }  
Run Code Online (Sandbox Code Playgroud)

我试过了:

  • 没有keyPreviewLayout的样式化KeyboardView(奇怪的是,替换此值会改变预览的样式.)
  • 我创建了keyPreviewLayout一个id为0的id引用(导致通胀崩溃).

难住了.:( 任何帮助将不胜感激!

android android-softkeyboard

17
推荐指数
1
解决办法
4894
查看次数

使用图书馆项目的活动

我有一个Library项目设置和一个依赖于这个库项目的项目 - Everything编译得很好,但我的Dependent项目运行正常;

我在使用Library项目中的Activity时遇到了间歇性问题.

我的Library项目可以作为库项目"取消选中","选择器"活动可以单独运行.Library在它自己的权利运行项目工作正常没有问题.

当我使用Library依赖项目中的项目(和"选择器"活动)时,它给了我NullPointerExceptions(或历史上DexOp)错误,说"picker"Activity无法找到它的资源.

任何人都可以告诉我他们之前是否经历过这种情况吗?

编辑

手动将项目活动layout.xml使用的Library项目活动复制到依赖项目使项目正确打开"选择器"活动.这需要吗?!当然不是吗?这进一步让我想知道R.javaLibrary项目中合并/引用整数id是否存在问题.

编辑

我不确定这是否有任何后果,但我的一个Library项目是围绕在不同前端项目中使用的一组自定义视图的包装器.

这些自定义视图都有一个Activity,因此可以单独测试它们.

其中一个视图具有自定义属性,这些属性在隔离运行时非常有效.但是,似乎依赖项目没有正确地拉入属性并将它们保留在原始命名空间中,导致导入的布局抛出编译错误:

[2012-05-16 12:07:28 - Project] D:\opt\workspace\CustomGlowList\res\layout\main.xml:14: error: No resource identifier found for attribute 'listId' in package 'com.company.library.glowlist'
[2012-05-16 12:07:28 - Project] D:\opt\workspace\CustomGlowList\res\layout\main.xml:14: error: No resource identifier found for attribute 'type' in package 'com.company.library.glowlist
Run Code Online (Sandbox Code Playgroud)

编辑

通过删除Dependent项目中存在的重复文件名来解决DexOp错误.不确定文件名是问题还是文件内容.

编辑

到目前为止,我一直无法找到这个问题的解决方案(尽管@ yorkw的答案肯定有助于xml属性!谢谢).

我设法让这个问题断断续续:

我已经通过每个库项目中去,并确保他们都有自己的命名空间(即com.company.library.component1, …

android library-project

16
推荐指数
2
解决办法
6302
查看次数