android - 如何以编程方式向 GridView 添加空行 :

标签 android gridview row adapter android-gridview

我知道这个问题已经被问过几次了,而且我知道您会说,GridView 与 ListView 对象一样,也由适配器实现支持,该适配器实现应该填充网格的行。

我的要求如下:我有一个表情符号 GridView ,当我按下我开发的键盘上的一个按钮时就会显示这些表情符号。作为表情符号 gridview 的一部分,我在其底部有一个按钮 View ,允许用户继续使用键盘(例如空格、删除、返回常规键盘等按钮......)

现在我想向 gridview 添加一个空行,这样我就可以允许用户选择网格最后一行上的表情符号(如果我不将此行添加到最后一行) GridView 的( GridView 的)位于附加按钮 View 的后面,无法选择)以下是一个示例:

Emoticons keyboard screenshot

正如您在此处看到的,最后一行位于附加按钮 View 后面,无法按下。我不能只是向 gridview 添加任意数量的空图标,因为从一个设备移动到另一个设备时,一行中的图标数量会发生变化。

所以问题是如何在不考虑行中项目数量的情况下向此 gridview 添加空行?

这是我的代码:

public class EmojiconGridView{
public View rootView;
EmojiconsPopup mEmojiconPopup;
EmojiconRecents mRecents;
Emojicon[] mData;

public EmojiconGridView(Context context, Emojicon[] emojicons, EmojiconRecents recents, EmojiconsPopup emojiconPopup) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    mEmojiconPopup = emojiconPopup;
    rootView = inflater.inflate(R.layout.emojicon_grid, null);
    setRecents(recents);
     GridView gridView = (GridView) rootView.findViewById(R.id.Emoji_GridView);
        if (emojicons== null) {
            mData = People.DATA;
        } else {
            Object[] o = (Object[]) emojicons;
            mData = Arrays.asList(o).toArray(new Emojicon[o.length]);
        }
        EmojiAdapter mAdapter = new EmojiAdapter(rootView.getContext(), mData);
        mAdapter.setEmojiClickListener(new OnEmojiconClickedListener() {

            @Override
            public void onEmojiconClicked(Emojicon emojicon) {
                if (mEmojiconPopup.onEmojiconClickedListener != null) {
                    mEmojiconPopup.onEmojiconClickedListener.onEmojiconClicked(emojicon);
                }
                if (mRecents != null) {
                    mRecents.addRecentEmoji(rootView.getContext(), emojicon);
                }
            }
        });
        gridView.setAdapter(mAdapter);
        View newEmpryView = new View(context);
        gridView.addView(newEmpryView);

}

private void setRecents(EmojiconRecents recents) {
    mRecents = recents;
}

public interface OnEmojiconClickedListener {
    void onEmojiconClicked(Emojicon emojicon);
} 

}

清楚的行:

 gridView.addView(newEmpryView);

给了我一个异常(exception)::AdapterView不支持addView(View),那么如何实现呢?谢谢。

最佳答案

您需要在 GridView 的最后一行添加一个空白项目,这样您就会得到一个空白行。

要获取 GridView 中的列数,您可以使用以下代码:

private int getNumColumnsCompat(Context aContext) {
        DisplayMetrics d = aContext.getResources().getDisplayMetrics();
        int w = d.widthPixels;
        float density = d.density;
        int num = (int) (w / (40 * density)) - 1; // 40 is the columnWidth of your Emoji_GridView
        return num;
    }

之后向 GridView 添加一个空白行,如下代码所示:

private void addItemsToList(int aNumColumnsCompat) {
        for (int i = 0; i < aNumColumnsCompat; i++) {
            mEmojiList.add(new Emojicon(""));
        }
    }

关于android - 如何以编程方式向 GridView 添加空行 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27345368/

相关文章:

html - Asp GridView 分页自定义 CSS 在设计 View 中有效,但在浏览器中无效

ASP.NET GridView 对计算字段进行排序

jQuery Datatables - 使用控件影响点击功能

javascript - 使用 Javascript 防止对每一行进行多重选择

android - Joomla 网站在页面刷新后在 android 默认浏览器上显示白屏

android - 在android中加密和解密字符串

安卓 :get an object from an inner class

java - 从非 Activity 类获取资源

c# - Asp.net grdiview : can i format the dataitems in an itemtemplate?

python - csv模块自动写入不需要的回车符