动态地添加的ImageView到现有视图 [英] Add imageview dynamically to existing view

查看:114
本文介绍了动态地添加的ImageView到现有视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发一个应用程序,它在启动时会显示像图片(1) pre定义布局在下面的截图。

I'm developing an app which on start up will show a pre-defined layout like Image(1) in below screenshot.

现在的onclick按钮,我要动态地在下面的截图中添加另一种观点认为像图片(2),以现有的观点产生到一些像图片(3)的下面的截图。

Now onclick of a button, I want to dynamically add another view like Image(2) in below screenshot to existing view resulting into some like Image(3) in below screenshot.

如果的onclick再次点击,图片(2)将被添加到现有的观点产生成类似图片(4)

If onclick is clicked again, Image(2) will be added to existing view resulting into something like Image(4).

我如何做到这一点
通过搜索,我发现,它需要像 LayoutInflater.addView()类似的this LinearLayout.addView()类似的this

How do I achieve this?
By searching, I found that it required something like LayoutInflater.addView() like this or LinearLayout.addView() like this.

但我不知道我的情况下使用的究竟是什么。照片还有,我不是想添加的只是一个单一的视图按钮点击,而是一群一定的意见像ImageView的,2 textviews等。如图图片(2)

But I don't know what exactly to use in my case.
Also, I'm not trying to add just a single view on button click, but a group of certain views like imageview, 2 textviews,etc. as shown in Image(2).

任何帮助AP preciated。

Any help appreciated.

我想是这样的: activity_main.xml

<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" >

        <LinearLayout
            android:id="@+id/main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/hello_world" />
        </LinearLayout>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:onClick="addViews"
        android:text="Add" />

</RelativeLayout>


MainActivity.java

public class MainActivity extends Activity {
    LinearLayout main;
    int count = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        main = (LinearLayout) findViewById(R.id.main);
    }

    public void addViews(View view) {
        LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT);
        Button btn = new Button(this);
        btn.setLayoutParams(lparams);
        count++;
        btn.setText("Hello World : " + count);
        main.addView(btn, count);
    }
}

它产生的是这样的:

It yields something like this:

现在,我该如何识别哪些按钮被点击?

推荐答案

您可以做很多的事情来获取工作,但最好的方法可以使用​​的ListView ArrayAdapter

You can do a lot of things to get that working, but the best approach could be using ListView and ArrayAdapter

创建扩展 ArrayAdapter℃的类;整数GT; 。在那里,创建一个接口来创建一个监听器。

Create a class that extends ArrayAdapter<Integer>. There, create a interface to create a Listener.

public interface OnListButtonItemClickedListener{

   public int onListButonItemClicked(int position);

}

定义的私人 OnListButtonItemClickedListener ArrayAdapter ,并创建一个公共的制定者。

Define a private OnListButtonItemClickedListener on your ArrayAdapter, and create a public setter.

private OnListButtonItemClickedListener listener;

public void setOnListButtonItemClickedListener(OnListButtonItemClickedListener listener){
    this.listener = listener;
}

定义的XML布局内的按钮。像这样的东西会做:

Define a button inside a Layout in XML. Something like this will do:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="8dip" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</LinearLayout>

创建一个内部 ViewHolder 类的<​​code> ArrayAdapter 类中是这样的:

Create a inner ViewHolder class inside your ArrayAdapter class like this:

private class ViewHolder{
    public Button b;
}

覆盖 getView 和创造的东西是这样的:

Override getView and create something like this:

@Override
public View getView(final int position, View convertView, ViewGroup parent){
        ViewHandler vh;
        if (convertView == null){
            convertView = View.inflate(getContext(), R.layout.your_layout, null);
            vh = new ViewHolder();
            vh.b = (Button) convertView.findViewById(R.id.button1);
            convertView.setTag(vh);
        } else {
            vh = (ViewHolder) convertView.getTag();
        }
        vh.b.setText(String.valueOf(getItem(i).intValue()));
        vh.b.setOnClickListener(new OnClickListener(){

            public void onClick(View v){
                if (listener != null){
                    listener.onListButonItemClicked(getItem(position).intValue());
                }
            }

        });
        return convertView;
    }

适配器设置为一个ListView,当你想添加一个新的,只是这样做:

Set the adapter to a ListView, and when you want to add a new one, just do this:

adapter.add(i);
adapter.notifyDataSetChanged();

这篇关于动态地添加的ImageView到现有视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆