2016-04-16 178 views
0

我正在编写一个代码,其中用户选择一些应用程序作为敏感来将锁定给它们。我使用API​​22中预定义的布局android.R.layout.simple_list_item_multiple_choice,其中包含CheckedTextView。我无法检索用户选择了哪些项目。我在Listener中尝试了一些操作,但我无法获得所需的输出。 请帮助我走上正轨。Android:从ListView中获取所选项目

SensitiveApps.java

package com.sr.droidlock; 

import android.content.Intent; 
import android.content.pm.ResolveInfo; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Switch; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

public class SensitiveApps extends ActionBarActivity { 

    ListView listView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sensitive_apps); 

     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setIcon(R.drawable.sensitive); 

     final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
     mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

     final List pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0); 
     ArrayList<String> tasks = new ArrayList<String>(); 
     String title; 

     for (Object object : pkgAppsList) { 
      ResolveInfo info = (ResolveInfo) object; 
      title = (String) ((info != null) ? getBaseContext().getPackageManager().getApplicationLabel(info.activityInfo.applicationInfo) : "???"); 
      tasks.add(title); 
     } 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, tasks); 
     adapter.sort(new Comparator<String>() { 
      @Override 
      public int compare(String lhs, String rhs) { 
       return lhs.compareToIgnoreCase(rhs); 
      } 
     }); 
     listView = (ListView) findViewById(R.id.listView); 
     listView.setAdapter(adapter); 
     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

     listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       String str = listView.getItemAtPosition(position).toString(); 
       Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       //Do nothing 
      } 
     }); 
    } 
} 
+0

use'listView.setOnItemClickListener()' –

回答

1

可能是这可以帮助你。

int len = listView.getCount(); 
SparseBooleanArray checked = listView.getCheckedItemPositions(); 
for (int i = 0; i < len; i++) 
if (checked.get(i)) { 
String item = cont_list.get(i);/* do whatever you want with the checked item */ 
} 
+0

什么是代码中的cont_list? – SanketSB

+1

@ SanketSB237'cont_list'应该是你的代码中的数组列表可能是'tasks',所以传递这个'tasks'而不是'cont_list'。 –

+0

是的'cont_list'意思是我的代码中的'tasks'。有效。感谢您的帮助@DevendraSingh&@jaydroider – SanketSB