Android GridView 项目和覆盖相对布局

发布于 2024-11-09 15:35:32 字数 2734 浏览 1 评论 0原文

我有一个使用自定义适配器动态创建的 GridView。单击 GridView 项目时,我必须在其下方显示一个气泡。我为此使用RelativeLayout,但每次气泡都会显示在左上角。

这是我的自定义适配器

public class GridAdapter extends BaseAdapter {

private Context mContext;
private GridItem[] items;

public GridAdapter(Context c) {

    mContext = c;
    items = GridItem.values();
    //inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public int getCount() {

    return items.length;
}

public GridItem getItem(int position) {

    return items[position];
}

public long getItemId(int position) {

    return items[position].getResourceId();
}

public static class ViewHolder {

    public ImageView image;
}

public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT,
                GridView.LayoutParams.WRAP_CONTENT));
        //imageView.setPadding(10, 10, 10, 10);
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setBackgroundResource(items[position].getResourceId());
    if (position == 3) {
        ImageView helpBubble = new ImageView(mContext);

    }
    //imageView.setTag(items[position]);
    return imageView;
}

}

这是设置气泡的代码

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                GridItem item = GridItem.values()[position];
                if (position != 6) {

                    Toast.makeText(HelpModeActivity.this, "Clicked on : " + item.getResourceId(), Toast.LENGTH_LONG)
                            .show();

                    LayoutInflater inflate = (LayoutInflater) mContext
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    RelativeLayout helpBubble = (RelativeLayout) inflate.inflate(R.layout.bubble, null);

                    TextView helpText = (TextView) helpBubble.findViewById(R.id.bubble_text);
                    helpText.setText("Lorem Epsum Dolor Emit ab asdfj asdflqwe fsadf wqrwqer asdfasdf wfsad asdfasdf rqwerqwrw");

                    Button moreButton = (Button) helpBubble.findViewById(R.id.bubble_button);
                    moreButton.setText("More Info");

                    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                            RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                    lp.addRule(RelativeLayout.BELOW, item.getResourceId());

                    gridRL.addView(helpBubble, lp);
}

我哪里出错了???

I have a dynamically created GridView using a custom adapter. On clicking the GridView item, I have to display a bubble under it. I am using RelativeLayout for this, but everytime the bubble is getting displayed on the top left corner.

This my custom adapter

public class GridAdapter extends BaseAdapter {

private Context mContext;
private GridItem[] items;

public GridAdapter(Context c) {

    mContext = c;
    items = GridItem.values();
    //inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public int getCount() {

    return items.length;
}

public GridItem getItem(int position) {

    return items[position];
}

public long getItemId(int position) {

    return items[position].getResourceId();
}

public static class ViewHolder {

    public ImageView image;
}

public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT,
                GridView.LayoutParams.WRAP_CONTENT));
        //imageView.setPadding(10, 10, 10, 10);
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setBackgroundResource(items[position].getResourceId());
    if (position == 3) {
        ImageView helpBubble = new ImageView(mContext);

    }
    //imageView.setTag(items[position]);
    return imageView;
}

}

Here's the code to set the bubble

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                GridItem item = GridItem.values()[position];
                if (position != 6) {

                    Toast.makeText(HelpModeActivity.this, "Clicked on : " + item.getResourceId(), Toast.LENGTH_LONG)
                            .show();

                    LayoutInflater inflate = (LayoutInflater) mContext
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    RelativeLayout helpBubble = (RelativeLayout) inflate.inflate(R.layout.bubble, null);

                    TextView helpText = (TextView) helpBubble.findViewById(R.id.bubble_text);
                    helpText.setText("Lorem Epsum Dolor Emit ab asdfj asdflqwe fsadf wqrwqer asdfasdf wfsad asdfasdf rqwerqwrw");

                    Button moreButton = (Button) helpBubble.findViewById(R.id.bubble_button);
                    moreButton.setText("More Info");

                    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                            RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                    lp.addRule(RelativeLayout.BELOW, item.getResourceId());

                    gridRL.addView(helpBubble, lp);
}

Where am I going wrong???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文