OnItemClickListener в ListView с 2 столбцами
У меня есть ListView для показа и воспроизведения аудио, который имеет свой привычный адаптер для заполнения и определения. Дело в том, что у меня есть 2 элемента, 1 кнопка для воспроизведения / остановки и 1 просмотр текста, который показывает название аудио.
Все становится хорошо и работает правильно. Тем не менее, я фактически работаю над MultiChoiceModeListener для их выбора и выполняю действия с этим выбором, НО, когда я пытаюсь выбрать одну строку, НИЧЕГО не происходит, я не могу выбрать их длинным щелчком, и в ЖУРНАЛЕ ничего не отображается.
Я попробовал этот метод с ListView с одним видом на строку и работает отлично, однако с 2, я застрял.
Это мой основной макет:
protected void loadAudios(View v)
{
lvAudios = (ListView) v.findViewById(R.id.list_audios);
int noAudios;
String query = "Select id_reg_mem, id_memory, information, type from Memory_REG where type = 'AUDIO' and id_memory =" + id_memory;
Cursor resultado = memoryDB.rawQuery(query, null);
Toast.makeText(getActivity().getApplicationContext(), "conteo = " + resultado.getCount(), Toast.LENGTH_SHORT).show();
if(resultado.moveToFirst())
noAudios = resultado.getCount();
else
return;
mem_regs = new ArrayList<Mem_Reg>();
do {
mem_regs.add(new Mem_Reg(resultado.getInt(0), resultado.getInt(1), resultado.getString(2), resultado.getString(3)));
} while (resultado.moveToNext());
adapter = new fAudioAdapter(getContext(), R.layout.audio_row, mem_regs);
lvAudios.setAdapter(adapter);
lvAudios.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lvAudios.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
if(checked == true) {
count++;
list_items.add(position);
}
else {
count--;
list_items.remove((Object) position);
}
mode.setTitle(count + " items selected");
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.my_context_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.delete_id:
//ArrayList<Integer> toDelete = new ArrayList<Integer>();
Collections.sort(list_items, Collections.<Integer>reverseOrder());
for (Integer position : list_items) {
//toDelete.add(adapter.getItem(position).ID_Mem_Reg);
DB_Utils.deleteMemReg(memoryDB, adapter.getItem(position).ID_Mem_Reg);
adapter.remove(mem_regs.get(position));
}
//DB_Utils.deleteMemory(memoryDB, toDelete);
//toDelete.clear();
Toast.makeText(getContext(), count + " items removed.", Toast.LENGTH_SHORT).show();
count = 0;
list_items.clear();
mode.finish();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
count = 0;
list_items.clear();
}
});
lvAudios.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getContext(), "Posición: " + position, Toast.LENGTH_SHORT).show();
}
});
}
Это адаптер
public class fAudioAdapter extends ArrayAdapter<Mem_Reg> {
fAudioAdapter.ViewHolder viewHolder;
MediaPlayer mPlayer;
boolean playing = false;
private static class ViewHolder {
private Button btnView;
private TextView tvView;
}
public fAudioAdapter(Context context, int textViewResourceId, ArrayList<Mem_Reg> items) {
super(context, textViewResourceId, items);
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(this.getContext())
.inflate(R.layout.audio_row, parent, false);
viewHolder = new fAudioAdapter.ViewHolder();
viewHolder.btnView = (Button) convertView.findViewById(R.id.btnPlayStopAudio);
viewHolder.btnView.setBackgroundColor(Color.GREEN);
viewHolder.tvView = (TextView) convertView.findViewById(R.id.tvAudio);
convertView.setTag(viewHolder);
} else {
viewHolder = (fAudioAdapter.ViewHolder) convertView.getTag();
}
Mem_Reg mem = getItem(position);
if (mem!= null) {
viewHolder.tvView.setText(mem.Information.substring(62));
viewHolder.btnView.setTag(mem.Information);
}
return convertView;
}
}
Это мое определение строки, тот, который имеет 2 элемента
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp">
<Button
android:id="@+id/btnPlayStopAudio"
android:layout_width="30dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tvAudio"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
И, наконец, определение списка:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".Calendario">
<ListView
android:id="@+id/list_audios"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</ListView>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabNewAudio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
app:fabSize="normal"
android:src="@drawable/ic_backup_white_48dp"
android:transitionName="prueba" />
</FrameLayout>
Любые ваши комментарии будут полностью оценены. Заранее спасибо.