2013-07-05 29 views
9

Tôi có một hoạt động trong trong ứng dụng của tôi mà tôi đã giữ nhưBật/tắt một hoạt động programatically

android:enabled="false" 

bây giờ tôi muốn rằng khi một nút được nhấp vào nó sẽ nhận đổi để

android:enabled="true" 

Tôi có thể làm cái này như thế nào?

Trả lời

19

Dưới đây là một ví dụ làm thế nào để bật/tắt một Hoạt động:

PackageManager pm = getPackageManager(); 
    pm.setComponentEnabledSetting(new ComponentName(this, com.packagename.MyActivity.class), 
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

    pm.setComponentEnabledSetting(new ComponentName(this, com.packagename.MyActivity.class), 
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 
+0

Tôi đã đặt điều này theo phương pháp onClick của nút và tôi nhận được thông báo lỗi "hàm tạo ComponentName() là không xác định –

+2

điều này trong hàm tạo là ngữ cảnh, do đó bạn sẽ phải thay thế bằng" myactivity.this ". hoạt động mà nút của bạn thuộc về –

2

Sử dụng PackageManager and setComponentEnabledSetting() để kích hoạt hoặc vô hiệu hóa bất kỳ thành phần trong ứng dụng của bạn: hoạt động, dịch vụ, vv

+0

Vì vậy, tôi chỉ có thể thực hiện thao tác này khi nút được nhấp phải không? –

+0

@VyprNoch: Bạn có thể làm điều đó bất cứ khi nào bạn muốn. :-) – CommonsWare

+0

@CommonsWare: Là ứng dụng hệ thống, tôi có thể vô hiệu hóa các thành phần từ các gói khác hoặc gói không? Hay nó đòi hỏi phải có chữ ký hệ thống? – Saty

3

Đây là một cách tốt đẹp để làm nó:

public static void setActivityEnabled(Context context,final Class<? extends Activity> activityClass,final boolean enable) 
    { 
    final PackageManager pm=context.getPackageManager(); 
    final int enableFlag=enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; 
    pm.setComponentEnabledSetting(new ComponentName(context,activityClass),enableFlag,PackageManager.DONT_KILL_APP); 
    } 

ví dụ sử dụng:

setActivityEnabled(this,SomeActivity.class,false); 
Các vấn đề liên quan