当前位置: 首页 > 面试题库 >

如何为用于图像和文本的列表视图创建自定义光标适配器?

宇文育
2023-03-14
问题内容

嗨,您想创建一个自定义光标适配器,以便显示2行文本的图像。我在理解自定义光标适配器时遇到了一些麻烦,但是我不明白如何添加要从数据库路径填充的imageview。


问题答案:

将,

实际上,我已经实现了与您正在寻找的东西非常相似的东西。这是我的实现。

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.database.Cursor;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.TextView;


public class ItemAdapter extends CursorAdapter {
    private LayoutInflater mLayoutInflater;
    private Context mContext;
    public ItemAdapter(Context context, Cursor c) {
        super(context, c);
        mContext = context;
        mLayoutInflater = LayoutInflater.from(context); 
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View v = mLayoutInflater.inflate(R.layout.items_row, parent, false);
        return v;
    }

    /**
     * @author will
     * 
     * @param   v
     *          The view in which the elements we set up here will be displayed.
     * 
     * @param   context
     *          The running context where this ListView adapter will be active.
     * 
     * @param   c
     *          The Cursor containing the query results we will display.
     */

    @Override
    public void bindView(View v, Context context, Cursor c) {
        String title = c.getString(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_TITLE));
        String date = c.getString(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_DATE));
        String imagePath = c.getString(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_IMG));
        int deletion = c.getInt(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_DELETION));
        int priority = c.getInt(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_PRIORITY));

        /**
         * Next set the title of the entry.
         */

        TextView title_text = (TextView) v.findViewById(R.id.item_text);
        if (title_text != null) {
            title_text.setText(title);
        }

        /**
         * Set Date
         */

        TextView date_text = (TextView) v.findViewById(R.id.item_date);
        if (date_text != null) {
            date_text.setText(date);
        }

        /**
         * Decide if we should display the paper clip icon denoting image attachment
         */

        ImageView item_image = (ImageView) v.findViewById(R.id.item_attachment);
        item_image.setVisibility(ImageView.INVISIBLE);
        if (imagePath != null && imagePath.length() != 0 && item_image != null) {
            item_image.setVisibility(ImageView.VISIBLE);
        }

        /**
         * Decide if we should display the deletion indicator
         */
        ImageView del_image = (ImageView) v.findViewById(R.id.item_deletion);
        del_image.setVisibility(ImageView.INVISIBLE);
        if (deletion == 1) {
            del_image.setVisibility(ImageView.VISIBLE);
        }
    }
}

XML只是万一…

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/list_bg">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView android:id="@+id/item_text"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:lines="1"
            android:scrollHorizontally="true"
            android:ellipsize="end"
            android:paddingLeft="2sp"
            android:paddingTop="2sp"
            android:textSize="18sp"
            android:textStyle="bold"
            android:shadowColor="#90909090"
            android:shadowDx="1.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"/>

        <TextView android:id="@+id/item_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:textColor="#FF808080"
            android:paddingLeft="2sp"
            android:paddingTop="2sp"/>
    </LinearLayout>

    <ImageView android:id="@+id/item_deletion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/deletion"
        android:visibility="invisible"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:paddingRight="5sp"/>

    <ImageView android:id="@+id/item_attachment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/attachment"
        android:visibility="invisible"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@id/item_deletion"/>

</RelativeLayout>

根据特定条件,这将在文本的两行显示最多2幅图像。

希望这可以为您的工作打下基础!

祝好运 :]



 类似资料:
  • 我有一个带有按钮的视图和一个列表视图,由包含bindView()和newView()的光标适配器支持,用于自定义视图。列表的每一行都包含一个Text和一个复选框。每个视图的数据来自数据库。我正在光标适配器构造函数中传递我的数据库适配器。当复选框被选中或取消选中时,我用它来更新数据库(效果很好)。当然,我对光标运行“重新查询”并view.refreshDrawableState())。这是个好主意吗

  • 我正在尝试为我的列表视图制作一个自定义适配器,但我在同一行上不断得到一个 RessourceNotFoundException。 首先,这是我的适配器类代码: 这是视图的xml,包含listview: 以及带有上述列表视图的项目布局的xml文件: 这是在我的活动中设置适配器的代码(扩展活动) 我遇到的错误是: 12661-12661/com.mobileplatformexam E/Android

  • 问题内容: 我有许多heroshot图像,单击它们时会弹出模式弹出窗口。我试图使光标在图像上移动时变成放大镜。即使我的位置正确,以下CSS也似乎无法正常工作。 有没有人做过类似的事情?我不介意一个JavaScript解决方案(如果存在)。 编辑 :它可以在Safari中,但不能在Firefox中使用。 问题答案: 您的问题可能是光标URL在Mac的Firefox中不起作用。 通过使用关键字,可以在

  • 我在android应用程序上使用自定义适配器查看列表。我不知道如何设置项目单击的侦听器。我的应用程序使用Kotlin。 这是我的适配器布局。 有人可以帮助我吗?

  • 问题内容: CSS定制游标可以使用外部图像URL吗?以下示例不起作用: HTML: CSS: 问题答案: 由于您的图片太大,因此无法正常工作-图片尺寸受到限制。例如,在Firefox中,大小限制为128x128px。。 此外,您还必须添加。

  • 问题内容: 我真的不确定如何以其他方式提出这个问题,但是我试图在图像上加载文本-这本身似乎是一个棘手的任务,但是我已经使用本教程进行了学习。不幸的是,该教程有点过时了,我无法找到一种方法来动态更改移动设备的字体大小和跨度,并且仍然将文本保持在图像顶部的正确位置。 调整窗口大小时,文本和框的大小无法正确调整(在图像外部溢出)。 我尝试过百分比调整以及其他技术,但运气不佳。下面显示了我用来在背景上显示