【问题标题】:enable clicking on list items android启用单击列表项android
【发布时间】:2016-01-12 11:12:07
【问题描述】:

我的代码在列表视图中显示具有特定权限的已安装应用程序。我想打开可以在每个列表项(应用程序)上卸载应用程序的设置。我该怎么做?

这里是打开应用设置的sn-p

packageName = "com.wagtailapp";
    try {
        // Open the specific App Info page:
        Intent intent = new Intent(
                android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.setData(Uri.parse("package:" + packageName));
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        // e.printStackTrace();
        // Open the generic Apps page:
        Intent intent = new Intent(
                android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
        startActivity(intent);

这是我的活动

public class MainActivity extends Activity {

    ArrayList<String> results = new ArrayList<String>();

     @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          getInstalledApps(this);
          ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listview, results);

          ListView listView = (ListView) findViewById(R.id.mobile_list);
          listView.setAdapter(adapter);
       }

      private ArrayList<String> getInstalledApps(Context context) {
        PackageManager packageManager = context.getPackageManager();
        List<PackageInfo> applist = packageManager.getInstalledPackages(0);
        Iterator<PackageInfo> it = applist.iterator();
        while (it.hasNext()) {
            PackageInfo pk = (PackageInfo) it.next();
            if ((pk.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
                Log.v("system app using internet = ", ""+pk.applicationInfo.loadLabel(packageManager));
                continue;
            }

            if (PackageManager.PERMISSION_GRANTED == packageManager .checkPermission(Manifest.permission.INTERNET, pk.packageName) ||
                    PackageManager.PERMISSION_GRANTED == packageManager .checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, pk.packageName))
                results.add("" + pk.applicationInfo.loadLabel(packageManager));
        }

        Log.v("app using internet = ", results.toString());

        return results;
    }
}

【问题讨论】:

标签: android


【解决方案1】:
@Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      getInstalledApps(this);
      ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listview, results);

      ListView listView = (ListView) findViewById(R.id.mobile_list);
      listView.setAdapter(adapter);
      listView.setOnItemClickListener(this);
   }


@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) { 

    //your code here

}

【讨论】:

  • 你的活动必须实现'OnItemClickListener'
  • MainActivity 类型的方法 onItemClick(AdapterView>, View, int, long) 必须重写或实现超类型方法
  • AdapterView类型中的setOnItemClickListener(AdapterView.OnItemClickListener)方法不适用于参数(MainActivity)
【解决方案2】:

试试这个:

listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                String packageName = (String)parent.getItemAtPosition(position);
            try {
                // Open the specific App Info page:
                Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                intent.setData(Uri.parse("package:" + packageName));
                startActivity(intent);
            } catch (ActivityNotFoundException e) {
                // e.printStackTrace();
                // Open the generic Apps page:
                Intent intent = new Intent(  android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
                startActivity(intent);
            }
        });

看看有没有效果..

【讨论】:

  • 我实现了你的代码,但它什么也没做!
【解决方案3】:

将此代码粘贴到您的 onCreate() 下方 listView.setAdapter(adapter);

 listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            String packageName = results.get(position);
            Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setData(Uri.parse("package:" + packageName));
            startActivity(intent);
        }
    });

【讨论】:

  • 它打开设置但立即关闭设置并在半秒后返回应用程序。
  • 试试这个:int UNINSTALL_REQUEST_CODE = 1; startActivityForResult(intent, UNINSTALL_REQUEST_CODE);
  • 但是在哪里?我很困惑
  • 还是一样,打开半秒后又回来了
  • 试试这个:int UNINSTALL_REQUEST_CODE = 1; intent.putExtra(Intent.EXTRA_RETURN_RESULT, true); startActivityForResult(intent, UNINSTALL_REQUEST_CODE);
猜你喜欢
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
相关资源
最近更新 更多