Android - 动态创建的视图,删除它们的废墟布局

时间:2017-08-30 17:05:20

标签: android android-layout android-xml

我有一个arraylist,对于该列表中的每个项目,输出项目旁边有一个按钮,以便从列表中删除该项目。

ArrayList<String> alString = new ArrayList();  
//ArrayList gets filled with data items
RelativeLayout Container = (RelativeLayout) findViewById(R.id.container);
int Tracker = 500000000;

for (String item:alString){
        final TextView textView = new TextView(this);
        textView.setText(item);
        textView.setId(Tracker);
        //positioning
        RelativeLayout.LayoutParams textViewParams = new 
        RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT);


        textViewParams.addRule(RelativeLayout.BELOW,Tracker - 2);
        textViewParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

        textView.setLayoutParams(textViewParams);

        //Create button to remove ingredient
        final Button Xbutton = new Button(this);
        Xbutton.setText("X");
        Xbutton.setId(Tracker + 1);
        //positioning
        RelativeLayout.LayoutParams XbuttonParams = new 
        RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT);
        XbuttonParams.addRule(RelativeLayout.ALIGN_TOP, 
        textView.getId());
        XbuttonParams.addRule(RelativeLayout.ALIGN_BOTTOM,  
        textView.getId());
        XbuttonParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

        Xbutton.setLayoutParams(XbuttonParams);

        //When button is clicked, remove the item
        Xbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                alString.remove(item);
                Container.removeView(textView);
                Container.removeView(Xbutton);
            }
        });

        Container.addView(textView);
        Container.addView(Xbutton);

        Tracker = Tracker + 2;
    }  
}

问题是,假设有10个项目,我用Xbuttons删除了第5个和第7个项目,很多项目开始重叠。所有的观点最终只是坐在彼此之上。如果我从上到下或从下到上逐个删除它们,则不会发生这种情况。但是,只要我删除列表中间的项目,它们就会开始相互重叠。我知道这是因为 跟踪器 - 来自textViewParams.addRule(RelativeLayout.BELOW,Tracker - 2)的2不再存在。但是,我需要那行代码,以便它们按顺序排列。如何阻止TextViews重叠?

1 个答案:

答案 0 :(得分:1)

尝试将ListView与自定义列表适配器一起使用,而不是手动添加视图。

  1. 在您的活动中:
  2. ListView listView =(ListView)findViewById(R.id.listView);
    ListAdapter adapter = new CustomAdapter(MainActivity.this,dataItems); //要添加的项目列表 adapter.setCustomButtonListner(MainActivity.this);
    listView.setAdapter(适配器);

    1. 创建扩展ArrayAdapter的自定义列表适配器(CustomAdapter)

    2. 为每个列表项创建布局,并为删除按钮初始化OnClickListener(确保在适配器的getView方法中设置按钮的标记)

    3. 每次删除某个项目时,请调用notifyDataSetChanged()刷新该列表。