CheckedTextView не проверяется, когда присутствует внутри родительского макета - PullRequest
0 голосов
/ 16 сентября 2018

Я занимаюсь разработкой приложения, которое содержит экран просмотра списка, в котором хранятся все мелодии, поступающие с моего сервера. При нажатии на любую мелодию звонка она должна начать воспроизводить эту мелодию звонка, а после нажатия кнопки загрузки рядом с ней она должна начать загрузку этой мелодии. мелодию звонка, не мешая воспроизведению медиаплеера.

Вот расположение экрана моего рингтона моего приложения. Screenshot when no download button is added

И я хочу поработать с этим Screenshot when download button is added Но рингтон не воспроизводится, когда рядом с CheckedTextView.

отображается кнопка загрузки.

Все, что я хочу сделать, это запустить MediaPlayer при щелчке по списку, приостановить его при повторном нажатии и загрузить рингтон при нажатии кнопки загрузки рядом с этим элементом. Во время воспроизведения, чтобы показать природу воспроизведения, я использовал CheckedTextView, который прекрасно работает, когда это только элемент, который должен быть накачан внутри списка. Но когда я добавляю кнопку загрузки рядом с ней, она не реагирует на щелчки.

Я просмотрел эту ссылку и эту ссылку, но не смог найти там никакой помощи.

Это мой фрагмент RingtonesActivity.java , где находится mediaPlayer

listView_ringtones.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    listView_ringtones.setItemChecked(position, true);
                    url = ringtoneList.get(position).getUrl();
                    ringtoneTitle = ringtoneList.get(position).getTitle();
                    pDialog = ProgressDialog.show(activityContext, "Starting Ringtone: ", ringtoneTitle);


                    if (mediaPlayer != null) {
                        mediaPlayer.stop();
                    }
                    mediaPlayer = new MediaPlayer();
                    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    try {
                        mediaPlayer.setDataSource(url);
                        mediaPlayer.prepareAsync();

                        itemClicked = true;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mp) {
                            if (pDialog.isShowing()) {
                                pDialog.dismiss();
                            }
                            mp.start();
                        }
                    });
                    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mp) {

                        }
                    });
                }
            });

и это мой getView() метод RingtoneAdapter.java

public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    final ViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.ringtone_list_item, parent, false);
        holder = new ViewHolder();
        holder.checkedTextView = convertView.findViewById(R.id.ringtone_checked);


        holder.download = convertView.findViewById(R.id.ringTones_download);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }




    holder.download.setOnClickListener(new View.OnClickListener() {
        @Override
      public void onClick(View v) {

            String downloadFileUrl = ringtoneList.get(position).getUrl();
           downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);

            Uri uri = Uri.parse(downloadFileUrl);
            DownloadManager.Request request = new DownloadManager.Request(uri);
           Toast.makeText(context, "Downloading...", Toast.LENGTH_SHORT).show();
            request.setTitle(ringtoneList.get(position).getTitle());
            request.setDescription("in progress..");
            request.setDestinationInExternalPublicDir("/AvengersRingtoneDownloads",
                    ringtoneList.get(position).getTitle() + ".mp3");
           request.setVisibleInDownloadsUi(true);
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

           downloadManager.enqueue(request);
        }
    });

    String title = ringtoneList.get(position).getTitle();
    String duration = "\nDuration:" + ringtoneList.get(position).getDuration();

    SpannableStringBuilder builder = new SpannableStringBuilder();
    Spannable span = new SpannableString(title);
    span.setSpan(new RelativeSizeSpan(1.0f), 0, title.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    span.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    span.setSpan(new ForegroundColorSpan(Color.rgb(16, 96, 122)), 0, title.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    builder.append(span);

    SpannableString blueSpannable = new SpannableString(duration);
    blueSpannable.setSpan(new ForegroundColorSpan(Color.rgb(23, 163, 209)), duration.indexOf(duration), duration.length(), 0);
    builder.append(blueSpannable);

    holder.checkedTextView.setText(builder);

    return convertView;
}

и вот мой listview_item.xml

<CheckedTextView

    android:id="@+id/ringtone_checked"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:drawableStart="@drawable/checked_state_list_song"
    android:gravity="center_vertical"
    android:textSize="17sp"
    xmlns:android="http://schemas.android.com/apk/res/android" />

вот мое определение списка

<ListView
    android:id="@+id/listView_ringtones"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/sultan_taunting"
    android:background="?attr/selectableItemBackground"
    android:choiceMode="singleChoice" />

Может кто-нибудь сказать мне, что я делаю неправильно? Потому что я долго искал в интернете и не нашел обходного пути или правильного решения.

...