适配器中使用的ImageView中的默认图像

时间:2016-11-09 13:55:49

标签: android android-layout listview

我只需要一种在列表视图中使用的所有imageview(见下文)上显示默认图片的方法。

此布局由适配器使用,因此在此布局上不会调用setContentView函数。我认为这会导致问题(默认图像不会出现)。我该如何解决?

图片defaultpic.png位于drawable文件夹中,为100x100px。

我的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    tools:context=".MainActivity"
    android:background="#222222"
    android:paddingTop="2dp"
    android:paddingBottom="2dp">

    <TextView
        android:id="@+id/profile_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Title"
        android:textColor="#fcdb8c"
        android:background="#222222"
        android:textStyle="normal"
        android:textSize="15sp"
        android:layout_alignParentTop="true"
        android:lines="1"
        android:scrollHorizontally="true"
        android:ellipsize="end"
        android:paddingRight="40dp"
        android:paddingLeft="2dp" />

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/profile"
        android:scaleType = "fitXY"
        android:src="@drawable/defaultpic"
        android:background="#151515"
        android:padding="1dp" />

</RelativeLayout>


@Override
public View getView(View convertView, ViewGroup parent) {

    RelativeLayout profileLay = (RelativeLayout)profileInf.inflate
            (R.layout.profile_layout, parent, false);

    TextView profileView = (TextView)profileLay.findViewById(R.id.profile_name);
    ImageView coverView = (ImageView)profileLay.findViewById(R.id.profile);

    profileView.setText(currProfile.getName());
    Drawable img = Drawable.createFromPath(currProfile.getCover());
    coverView.setImageDrawable(img);
    return profileLay;
}

2 个答案:

答案 0 :(得分:1)

您为listviewitem生成的布局具有图片

<RelativeLayout...>
    <ImageView android:id="@+id/profile" android:src="@drawable/defaultpic" ... />
</RelativeLayout>

当创建listviewitem时,您会立即覆盖imageview中的图片

@Override
public View getView(View convertView, ViewGroup parent) {
    ...
    ImageView coverView = (ImageView)profileLay.findViewById(R.id.profile);
    Drawable img = Drawable.createFromPath(currProfile.getCover());
    coverView.setImageDrawable(img);
    ...
因此,您没有看到默认图片

答案 1 :(得分:1)

正如k3b所说: 您为listviewitem生成的布局具有图像 因此,您没有看到默认图片。

纠正这个问题的方法是添加一个if语句。

ImageView coverView = (ImageView)profileLay.findViewById(R.id.profile); if (Drawable.createFromPath(currProfile.getCover()) == null) { Drawable img = Drawable.createFromPath(currProfile.getCover()); coverView.setImageDrawable(img); }

这将导致它仅加载配置文件封面(如果它不为空),但如果是,则将使用默认配置文件图像。