小编bli*_*uff的帖子

Android碎片.在屏幕旋转或配置更改期间保留AsyncTask

我正在使用智能手机/平板电脑应用程序,只使用一个APK,并根据屏幕大小根据需要加载资源,最佳设计选择似乎是通过ACL使用Fragments.

这个应用程序一直工作正常,直到现在只是基于活动.这是一个模拟类,用于处理活动中的AsyncTasks和ProgressDialogs,以便在屏幕旋转或通信中发生配置更改时使它们工作.

我不会改变清单以避免重新创建活动,有很多原因我不想这样做,但主要是因为官方文档说它不是推荐的,而且我已经管理了这么远,所以请不要推荐路线.

public class Login extends Activity {

    static ProgressDialog pd;
    AsyncTask<String, Void, Boolean> asyncLoginThread;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.login);
        //SETUP UI OBJECTS
        restoreAsyncTask();
    }

    @Override
    public Object onRetainNonConfigurationInstance() {
        if (pd != null) pd.dismiss();
        if (asyncLoginThread != null) return (asyncLoginThread);
        return super.onRetainNonConfigurationInstance();
    }

    private void restoreAsyncTask();() {
        pd = new ProgressDialog(Login.this);
        if (getLastNonConfigurationInstance() != null) {
            asyncLoginThread = (AsyncTask<String, Void, Boolean>) getLastNonConfigurationInstance();
            if (asyncLoginThread != null) {
                if (!(asyncLoginThread.getStatus()
                        .equals(AsyncTask.Status.FINISHED))) {
                    showProgressDialog();
                }
            }
        } …
Run Code Online (Sandbox Code Playgroud)

android progressdialog android-asynctask android-fragments android-support-library

84
推荐指数
4
解决办法
6万
查看次数

片段标准转换不是动画

我正在使用v4 android兼容性库来开发平板电脑用户界面,使用专门针对Android 2.2设备的片段.

一切都按照预期的方式工作,除了我无法使任何动画工作,甚至标准动画都没有.

码:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ABCFragment abcFragment = new ABCFragment();
    ft.replace(R.id.main_frame_layout_fragment_holder,abcFragment);     
    ft.addToBackStack(null);
    ft.commit();
Run Code Online (Sandbox Code Playgroud)

片段冻结大约一秒钟而不是使用过渡动画,而刚刚消失并出现新的片段.

使用:

ft.setCustomAnimations(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
Run Code Online (Sandbox Code Playgroud)

也不起作用.

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.synergygb.mycustomapp"
android:id="@+id/LinearLayout01" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical"
android:gravity="bottom">
<FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main_frame_layout_fragment_holder">
</FrameLayout>
<!-- OTHER FIXED UI ELEMENTS-->
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我读到自定义动画在兼容性库中被破坏了,但似乎没有人遇到标准转换的问题.我已经在3.2.1摩托罗拉Xoom,2.3 Galaxy Tab 7",2.2仿真器,甚至在2.4.4的HTC G2上进行了测试.

这可能有什么问题?

animation android android-fragments android-support-library

45
推荐指数
3
解决办法
4万
查看次数

在Android中设置微调器onClickListener()

我试图让一个onClickListener在Spinner上触发,但是我收到以下错误:

Java.lang.RuntimeException是"不要为AdapterView调用setOnClickListener.你可能需要setOnItemClickListener,"

我确定我想调用onClickListener而不是onItemClickListener.我在Stack Overflow上找到了其他人提出的问题,有没有办法将setOnClickListener与Android Spinner一起使用?

答案说:

您必须在微调器的基础视图(通常是带有id:android.R.id.text1的TextView)上设置Click侦听器.为此:

创建自定义Spinner在构造函数(带属性)中通过提供布局android.R.layout.simple_spinner_item来创建微调器.执行findViewById(android.R.id.text1)以获取TextView现在将onClickListener设置为TextView

我已经尝试过那里提到的答案,但它似乎没有用.我在执行findViewById()后得到一个指向TextView的空指针.

这就是我正在做的事情:

Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.layoutspinner,dataArray);

spinner.setAdapter(adapter);

TextView SpinnerText = (TextView)findViewById(R.id.spinnerText);
if (SpinnerText == null) {
    System.out.println("Not found");
}
else {
    SpinnerText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            //Do something
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

文件layoutspinner.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/spinnerText"
                  android:singleLine ="true"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:textSize="6pt"
                  android:gravity="right"/>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我是Stack Overflow的新手,我没有找到任何办法向另一个帖子发布一个aditional问题(或评论,因为我需要很少代表)所以我开始了一个新问题.

每个推荐我试过这个:

int a = spinnerMes.getCount();
int b = spinnerMes.getChildCount();
System.out.println("Count = " + a); …
Run Code Online (Sandbox Code Playgroud)

java android onclick spinner

36
推荐指数
5
解决办法
10万
查看次数

Android通过Intent启动或带来另一个应用程序

我无法让这个工作,这里快速概述了这个想法.

首先,我无法改变这背后的逻辑,这是来自客户的特定要求,我意识到使用任何工具,例如AnyCut,它可以被绕过,但这并不重要.

我的客户提供了一套应用程序,其想法是所有应用程序的应用程序都将从"仪表板应用程序"启动,因此我只在主启动器中显示仪表板应用程序而不是所有应用程序图标.

让我们拿两个应用程序来解决这个问题.仪表板应用程序(A)和接收应用程序(B).

我想在应用B上建立一个意图过滤器(我认为),这样每当我进入应用程序A,然后单击应用程序B图标时,该应用程序将被启动或从它所允许的位置(从前面开始)启动.

这甚至可能吗?如果是这样,我该怎么办?我设法通过在应用程序中专门启动一个活动来启动它:

Intent i = new Intent();
i.setClassName("PACKAGE_NAME","SPECIFIC_CLASS");
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的行为,因为它总是在相同的位置启动应用程序B.

提前完成,斯特凡诺

编辑:添加了一些新信息.我正在看DDMS.

如果我从头开始通过主要的Android启动器启动应用程序的意图与我按下主页按钮时的意图完全相同,然后只将应用程序放在前面,即将进行的任何活动.所以我试图重复,不成功地直到现在,这个意图.

INFO/ActivityManager(1292): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.package/.uiPackage.Activity}
Run Code Online (Sandbox Code Playgroud)

这就是AnyCut的做法

Intent { act=android.intent.action.VIEW flg=0x10000000 cmp=com.example.package/.uiPackage.Activity bnds=[125,242][235,360]}
Run Code Online (Sandbox Code Playgroud)

知道如何创建完全相同的意图吗?我甚至无法在Intent API中找到该标志.

android launch intentfilter android-intent

5
推荐指数
1
解决办法
8950
查看次数