как добавить изображение в элемент списка? - PullRequest
0 голосов
/ 24 июня 2018

У меня есть просмотр списка, который динамически загружается ссылками на видео из базы данных mysql. Когда я нажимаю на элемент моего списка, я запускаю видео, соответствующее этому элементу, но теперь я хотел бы добавить imagabutton в каждый элемент моего списка, чтобы пользователь мог загрузить соответствующее видео. Я знаю, как использовать диспетчер загрузок для управления загрузкой, но как сделать, чтобы кнопка моего изображения была кликабельной без отмены щелчка по элементу lisview и как загрузить точное видео, соответствующее каждому элементу списка?

Вот мой адаптер

public class CustomAdapter extends ArrayAdapter<String> {

private String[] androidosnames;
private String[] titre;
private String[] url;
private Bitmap[] bitmaps;
private Activity context;

public CustomAdapter(Activity context, String[] androidosnames, String[] titre, Bitmap[] bitmaps, String[] url) {
    super(context, R.layout.list_item, androidosnames);
    this.context = context;
    this.url = url;
    this.titre = titre;
    this.bitmaps = bitmaps;
    this.androidosnames = androidosnames;

}

@NonNull
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = context.getLayoutInflater();
    final View listViewItem = inflater.inflate(R.layout.list_item, null, true);

    TextView androidos = listViewItem.findViewById(R.id.tvandroidosnames);
    TextView textView = listViewItem.findViewById(R.id.url);
    TextView titresong = listViewItem.findViewById(R.id.titre);

    androidos.setText(androidosnames[position]);
    titresong.setText(titre[position]);
    textView.setText(url[position]);

    textView.setVisibility(View.INVISIBLE);
    textView.setSelected(true);
    androidos.setSelected(true);

    ImageView image = listViewItem.findViewById(R.id.imgvw);
    image.setImageBitmap(Bitmap.createScaledBitmap(bitmaps[position], 100, 100, false));

    return listViewItem;

Вот мой элемент списка

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
    android:id="@+id/imgvw"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"/>

<TextView
    android:id="@+id/titre"
    android:layout_width="150dp"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="14dp"
    android:layout_marginStart="14dp"
    android:layout_toEndOf="@+id/imgvw"
    android:layout_toRightOf="@+id/imgvw"
    android:text="New Text"
    android:textSize="20sp"
    android:textStyle="bold"
    android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"/>

<TextView
    android:id="@+id/tvandroidosnames"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/imgvw"
    android:layout_toRightOf="@+id/imgvw"
    android:layout_below="@+id/titre"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:textColor="@color/colorAccent"
    android:text="url;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
    android:layout_marginLeft="14dp"
    android:typeface="sans"
    android:layout_marginStart="14dp" />
<TextView
    android:id="@+id/url"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/imgvw"
    android:layout_toRightOf="@+id/imgvw"
    android:layout_below="@+id/titre"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:textColor="@color/colorAccent"
    android:text="url;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
    android:layout_marginLeft="14dp"
    android:typeface="sans"
    android:layout_marginStart="14dp" />
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_centerVertical="true"
    app:srcCompat="@drawable/ic_file_download_black_24dp"
    android:layout_marginEnd="5dp"
    android:layout_marginRight="5dp"/>
<ImageView
    android:id="@+id/coeur"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_centerVertical="true"
    app:srcCompat="@drawable/ic_like"
    android:layout_marginEnd="50dp"
    android:layout_marginRight="50dp"/>
<TextView
    android:id="@+id/counter"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginEnd="85dp"
    android:layout_marginRight="85dp"/>

и вот код, который позволяет мне запустить видео в другой деятельности

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Intent intent = new Intent(MainActivity.this, PlayVideo.class);
            intent.putExtra("url", GetJson.urla[i]);
            intent.putExtra("name", GetJson.Android_Name[i]);
            intent.putExtra("title", GetJson.titre[i]);
            startActivity(intent);
            overridePendingTransition(R.anim.activity_back_in, R.anim.activity_back_out);
            finish();
        }
    });

любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 июня 2018

Попробуйте следующее: (Идея в том, чтобы добавить onClickListener () для каждого из представлений каждого элемента в списке - когда пользователь нажимает на что-либо, кроме imageView, запускает видео, иначе загружает видео. Этот код не тестируетсяЕсли во время тестирования вы столкнулись с проблемой, просто напишите комментарий ниже).

1) MnnnnnnnActivity.class: -------------

 public class MnnnnnnnActivity extends AppCompatActivity implements ListItemListener {

private ListView lv;
private CustomAdapter customAdapter;
private String[] androidnames;
private String[] titre;
private Bitmap[] bitmaps;
private String[] url;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.layout6);

    //populate arrays (androidnames, titre , bitmaps , url);

    lv = (ListView) findViewById(R.id.lv);
    customAdapter = new CustomAdapter(getApplicationContext() , androidnames , titre , bitmaps , url , MnnnnnnnActivity.this);
    lv.setAdapter(customAdapter);

}

@Override
public void Launch_Video(int position) {

}

@Override
public void Download_Video(int position) {

}
}

2) CustomAdapter.class: -------

public class CustomAdapter extends ArrayAdapter<String> {

private String[] androidosnames;
private String[] titre;
private String[] url;
private Bitmap[] bitmaps;
private Context context;
private ListItemListener callback;

public CustomAdapter(Context context, String[] androidosnames, String[] titre, Bitmap[] bitmaps, String[] url , ListItemListener l) {
    super(context, R.layout.list_view_item, androidosnames);
    this.context = context;
    this.url = url;
    this.titre = titre;
    this.bitmaps = bitmaps;
    this.androidosnames = androidosnames;
    if(l != null){
        callback = l;
    }

}

@NonNull
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(R.layout.list_view_item, null);
        holder = new ViewHolder();

        holder.androidos = (TextView) convertView.findViewById(R.id.tvandroidosnames);
        holder.androidos.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(callback != null){
                    callback.Launch_Video(position);
                }
            }
        });


        holder.textView = (TextView)convertView.findViewById(R.id.url);
        holder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(callback != null){
                    callback.Launch_Video(position);
                }
            }
        });


        holder.titresong = (TextView) convertView.findViewById(R.id.titre);
        holder.titresong.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(callback != null){
                    callback.Launch_Video(position);
                }
            }
        });


        holder.image = (ImageView) convertView.findViewById(R.id.imgvw);
        holder.image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(callback != null){
                    callback.Download_Video(position);
                }
            }
        });

        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.androidos.setText(androidosnames[position]);
    holder.titresong.setText(titre[position]);
    holder.textView.setText(url[position]);

    holder.textView.setVisibility(View.INVISIBLE);
    holder.textView.setSelected(true);
    holder.androidos.setSelected(true);

    holder.image.setImageBitmap(Bitmap.createScaledBitmap(bitmaps[position], 100, 100, false));

    return convertView;

}

private class ViewHolder {
    TextView androidos;
    TextView textView;
    TextView titresong;
    ImageView image;
}

}

3) Интерфейс ListItemListener: ----------

public interface ListItemListener {

public void Launch_Video(int position);

public void Download_Video(int position);
}

4) layout6.xml: --------

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lv">
</ListView>

</android.support.constraint.ConstraintLayout>

5) list_view_item.xml совпадает с list_item.

...