2015-02-16 2 views
0

Я динамически создаю линейную компоновку внутри цикла для всплывающего окна и пытаюсь добавить слушателя к каждому макету.Нажмите на прослушиватель динамически созданного linearlayout

Я использую следующий код. Но когда я нажимаю на любую из макета, она очищает все данные ..

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(); 
} 

Так что, когда я нажимаю на Linear Layout, данные независимо от его отображения идет невидимая и чтобы сделать его видимым, мне нужно перезагрузить приложение, никаких исключений. Plz помогите мне, если я делаю что-то неправильно ....

+0

onclick lister и eventAdapter.notifyDataSetChanged(); gridView.invalidate(); происходят в одно и то же время, что вы хотите достичь с notifydatasetadapter? – KOTIOS

+0

На самом деле я меняю данные, поэтому дат, почему я помещаю eventAdapter.notifyDataSetChanged(), но все же, если я удалю те строки, которые будут выполняться по типу m. .. – Rohit

+0

eventData.clear(); это эффект? – KOTIOS

ответ

1

Попробуйте использовать LinearLayout layout = null; внутри для петли.

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(); 
      } 
     }); 
    } 
Смежные вопросы