【问题标题】:Click listener on dynamically created linearlayout单击动态创建的线性布局上的侦听器
【发布时间】:2015-02-16 05:29:08
【问题描述】:

我正在为弹出窗口的循环内部动态创建线性布局,并尝试为每个布局添加侦听器。

我正在使用以下代码。但是当我点击任何布局时,它会清除所有数据..

    LinearLayout layout = null; 

    for(int i=0;i<data.size();i++)
    {
        layout=new LinearLayout(MainActivity.this);
        layout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
        eventFilterlayout.addView(layout);
        eventFilterlayout.setTag(new Holder(layout));

        imageView=new ImageView(MainActivity.this);
        imageView.setImageResource(data.get(i).getImgRes());
        imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,1.0f));
        layout.addView(imageView);


        eventNameText=new TextView(MainActivity.this);
        eventNameText.setText(data.get(i).getText());
        eventNameText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,4.0f));
        eventNameText.setGravity(Gravity.CENTER_VERTICAL);
        layout.addView(eventNameText);

        final Holder holder=(Holder)eventFilterlayout.getTag();

        holder.layout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(eventNameText.getText().equals("All"))
                    fillGridData(Utils.ALL);
                if(eventNameText.getText().equals("Some"))
                    fillGridData(Utils.SOME);
                if(eventNameText.getText().equals("None"))                      
                    fillGridData(Utils.NONE);
                if(eventNameText.getText().equals("Little more"))
                    fillGridData(Utils.MORE)
                if(eventNameText.getText().equals("Little less"))
                    fillGridData(Utils.LESS);

                window.dismiss();
            }
        });
    }

在fillGridData方法中

public void fillGridData(int type)
{
    eventData.clear();

    switch (type) {

    case Utils.ALL:
        list.add(new EventData("All",R.raw.hall1),          
        list.add(new EventData("All", R.raw.hall2));            
    break;

    case Utils.SOME:
        list.add(new EventData("Some", R.raw.hall2));           
        break;

    case Utils.NONE:
        break;

    case Utils.MORE:
        list.add(new EventData("More",R.raw.hall1); 
        break;

    case Utils.LESS:
        list.add(new EventData("Less",R.raw.hall1),         
        list.add(new EventData("Less", R.raw.hall2));
        break;

    default:
        break;
    }

    eventAdapter=new EventAdapter(MainActivity.this,eventData);
    gridView.setAdapter(eventAdapter);
    eventAdapter.notifyDataSetChanged();
    gridView.invalidate();
    gridView.bringToFront();
}

所以当我点击线性布局时,无论它显示的数据都是不可见的,为了使其可见,我需要重新启动应用程序,没有例外。如果我做错了什么,请帮助我......

【问题讨论】:

  • onclick 列表和 eventAdapter.notifyDataSetChanged(); gridView.invalidate();同时发生,你想用 notifydatasetadapter 实现什么?
  • 实际上我正在更改数据,这就是为什么我放置 eventAdapter.notifyDataSetChanged() 但仍然如果我删除那些行,我会得到相同的行为..
  • eventData.clear();这有影响吗?
  • @Rohit 检查以下链接以更了解其工作原理stackoverflow.com/questions/4198425/…
  • @diva: 不,最初它正在加载数据.. 最初在 onCreate 我正在调用相同的方法,当时它正在加载数据,但是当我单击它时它没有加载任何数据

标签: android


【解决方案1】:

尝试使用LinearLayout layout = null;在 for 循环中。

 for(int i=0;i<data.size();i++)
    {
       LinearLayout layout=new LinearLayout(MainActivity.this);
        layout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
        eventFilterlayout.addView(layout);


        ImageView imageView=new ImageView(MainActivity.this);
        imageView.setImageResource(data.get(i).getImgRes());
        imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,1.0f));
        layout.addView(imageView);


        TextView eventNameText=new TextView(MainActivity.this);
        eventNameText.setText(data.get(i).getText());
        eventNameText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,4.0f));
        eventNameText.setGravity(Gravity.CENTER_VERTICAL);
        layout.addView(eventNameText);



        layout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(eventNameText.getText().equals("All"))
                    fillGridData(Utils.ALL);
                if(eventNameText.getText().equals("Some"))
                    fillGridData(Utils.SOME);
                if(eventNameText.getText().equals("None"))                      
                    fillGridData(Utils.NONE);
                if(eventNameText.getText().equals("Little more"))
                    fillGridData(Utils.MORE)
                if(eventNameText.getText().equals("Little less"))
                    fillGridData(Utils.LESS);

                window.dismiss();
            }
        });
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 2015-10-21
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多