startactivity()不适用于扩展ListActivity的内部类

时间:2011-08-27 21:29:44

标签: android android-emulator android-listview

标题基本上都说明了一切。下面的代码不会抛出任何错误,它只是不启动新活动。代码如下。

我尝试修改startActivity(new Intent(mCtx, NewActivity.class));以阅读startActivity(new Intent(MyListActivity.this, NewActivity.class));

我一直在Eclipse中使用AVD进行测试。

对此的任何想法都将不胜感激 - 谢谢!

public class MyListActivity extends ListActivity {

private Context mCtx;
MyContentObserver mContentObserver;

@Override
public void onCreate(Bundle onSavedInstance) {
    super.onCreate(onSavedInstance);
    setContentView(R.layout.calls_list);

    mContentObserver = new MyContentObserver(this);

    this.getApplicationContext().getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, mContentObserver);

}

private class MyContentObserver extends ContentObserver {
    private Context mCtx;
    public MyContentObserver(Context ctx ) {
        super(null);
        mCtx = ctx;
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        startActivity(new Intent(mCtx, NewActivity.class));
    }
}   
}

1 个答案:

答案 0 :(得分:3)

可能的原因1

尚未宣布该活动。

您必须将活动添加到AndroidManifest.xml

您应该将其添加到<application>

中的AndroidManifest.xml标记中
<activity android:name="package.name.NewActivity">
    <!-- Add an intent filter here if you wish -->
</activity>

可能的原因2

onChange方法实际上并未运行。

请使用以下代码验证是否实际调用了onChange方法:

public class MyListActivity extends ListActivity {
    MyContentObserver mContentObserver;

    @Override
    public void onCreate(Bundle onSavedInstance) {
        super.onCreate(onSavedInstance);
        setContentView(R.layout.calls_list);

        mContentObserver = new MyContentObserver();

        this.getApplicationContext().getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, mContentObserver);
    }

    private class MyContentObserver extends ContentObserver {
        public MyContentObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            Log.d("MyListActivity.MyContentObserver", "onChange");
            startActivity(new Intent(MyListActivity.this, NewActivity.class));
        }
    }   
}

您还可以尝试从onCreate启动活动以确保它可以启动。