2015-01-12 7 views
-1

Мне нужен список в диалоговом окне с каждой строкой, имеющей имя приложения, значок и флажок. Я использовал класс адаптера, который генерирует каждую строку. я сделал, как:setOnItemClickListener() для ListView недоступен

lv = (ListView) findViewById(R.id.aplist); 
lv.setAdapter(applistadapter); 
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 
        /* some code*/ 
      } }); 

public class ApplicationAdapter extends ArrayAdapter<ApplicationInfo> { 
 
\t private List<ApplicationInfo> appsList = null; 
 
\t private Context context; 
 
\t private PackageManager packageManager; 
 
\t private TextView appName; 
 
\t private ImageView iconview; 
 
\t CheckBox check; 
 
\t boolean[] itemChecked; 
 

 
\t public ApplicationAdapter(Context context, int textViewResourceId, 
 
\t \t \t List<ApplicationInfo> appsList) { 
 
\t \t super(context, textViewResourceId, appsList); 
 
\t \t this.context = context; 
 
\t \t this.appsList = appsList; 
 
\t \t packageManager = context.getPackageManager(); 
 
\t \t itemChecked = new boolean[appsList.size()]; 
 
\t \t Log.wtf("c", "34werty"); 
 
\t } 
 

 
\t @Override 
 
\t public int getCount() { 
 
\t \t return ((null != appsList) ? appsList.size() : 0); 
 
\t } 
 
\t 
 
\t @Override 
 
\t public boolean isEnabled(int position) { 
 
\t \t return true; 
 
\t } 
 

 
\t @Override 
 
\t public ApplicationInfo getItem(int position) { 
 
\t \t Log.wtf("c", "23werty"); 
 
\t \t return ((null != appsList) ? appsList.get(position) : null); 
 
\t } 
 

 
\t @Override 
 
\t public long getItemId(int position) { 
 
\t \t return position; 
 
\t } 
 

 
\t @Override 
 
\t public View getView(final int position, View convertView, ViewGroup parent) { 
 
\t \t View view = convertView; 
 
\t \t if (null == view) { 
 
\t \t \t LayoutInflater layoutInflater = (LayoutInflater) context 
 
\t \t \t \t \t .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 
\t \t \t view = layoutInflater.inflate(R.layout.row, null); 
 
\t \t \t Log.wtf("c", "12werty"); 
 
\t \t } 
 

 
\t \t ApplicationInfo data = appsList.get(position); 
 
\t \t if (null != data) { 
 
\t \t \t Log.wtf("c", "werty"); 
 
\t \t \t appName = (TextView) view.findViewById(R.id.app_name); 
 
\t \t \t // TextView packageName = (TextView) 
 
\t \t \t // view.findViewById(R.id.app_paackage); 
 
\t \t \t iconview = (ImageView) view.findViewById(R.id.app_icon); 
 
\t \t \t check = (CheckBox) view.findViewById(R.id.checkbox1); 
 

 
\t \t \t appName.setText(data.loadLabel(packageManager)); 
 
\t \t \t // packageName.setText(data.packageName); 
 
\t \t \t iconview.setImageDrawable(data.loadIcon(packageManager)); 
 
\t \t \t 
 
\t \t \t check.setChecked(false); 
 
\t \t \t if (itemChecked[position]) 
 
\t \t \t \t check.setChecked(true); 
 
\t \t \t else 
 
\t \t \t \t check.setChecked(false); 
 

 
\t \t \t check.setOnClickListener(new OnClickListener() { 
 
\t \t \t \t @Override 
 
\t \t \t \t public void onClick(View v) { 
 
\t \t \t \t \t // TODO Auto-generated method stub 
 
\t \t \t \t \t if (check.isChecked()) 
 
\t \t \t \t \t \t itemChecked[position] = true; 
 
\t \t \t \t \t else 
 
\t \t \t \t \t \t itemChecked[position] = false; 
 
\t \t \t \t \t check.setTag(position); 
 
\t \t \t \t } 
 
\t \t \t }); 
 

 
\t \t } 
 

 
\t \t return view; 
 
\t } 
 
};

Теперь проблема заключается в том, что управление никогда не переходит в setOnItemClickListener().

Пожалуйста, помогите мне решить эту проблему.

спасибо.

+0

[Проверить здесь] (http://stackoverflow.com/questions/20208285/listview-itemclick-not-work/20208788#20208788) – Dev

+0

Можете ли вы опубликовать свой код адаптера? – mjp66

+0

@DroneDev Я посетил эту ссылку .. и опробовал решение .. но это не решило проблему. Я не могу найти причину, по которой мой onItemClick() недоступен –

ответ

0

Проблема может заключаться в том, что элементы внутри listView захватывают щелчок перед списком. Чтобы избежать этого, установите этот атрибут внутри разметки ListView XML:

 android:descendantFocusability="blocksDescendants" 

или программно:

 lv.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS); 

Или вы также можете отключить фокус ваших элементов внутри ListView, например:

 yourCheckBox.setFocusable(false); 
+0

Спасибо ... но это не сработало для меня. –