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>

Любые ваши комментарии будут полностью оценены. Заранее спасибо.

0 ответов

Другие вопросы по тегам