2013-11-28 6 views
0

Я использую следующий код для создания кнопки в горизонтальной компоновке с использованием массива имен кнопок:Как создать кнопки при нажатии кнопки?

LinearLayout tabView = (LinearLayout) findViewById(R.id.tabView); 
     tabView.setOrientation(LinearLayout.HORIZONTAL); //Can also be done in xml by android:orientation="vertical" 
      for (int i = 0; i < tabButtonNames.length; i++) { 
       Button btnTag = new Button(this); 
       btnTag.setText(tabButtonNames[i]); 
       btnTag.setWidth(50); 
       btnTag.setHeight(14); 
       btnTag.setTextSize(8); 
       btnTag.setId(i); 
       btnTag.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View arg0) { 
         ---the code TODO 
       }); 
       tabView.addView(btnTag); 
      } 

Они созданы, но я не могу изменить высоту и ширину кнопок с помощью setWidth, setHeight или LayoutParam. Затем, нажимая кнопку, я хочу создать список дополнительных кнопок в своем вертикальном макете, используя массив имен кнопок. Я использовал тот же самый код, что и выше, в методе onClick, но приложение аварийно завершает работу при нажатии кнопки. Также Button btn=new Button(this) не может использоваться в onClick. Я сделал это в приложении i-Pad, но здесь у меня проблемы.

+0

Используйте кнопки БТН = новая кнопка (getApplicationContext()); –

+0

pls публикует ваш полный код и ошибки logcat. –

ответ

6

Использование

Button btn = new Button(getApplicationContext()); 

ИЛИ

Button btn = new Button(ActivityName.this);

вместо

Button btn = new Button(this); 

Как кнопка требует контекста. А в OnClick контекст Activity недоступен.

+0

Что делать, если я хочу использовать собственный метод? Я должен использовать clickListener? –

+0

, если вы хотите, чтобы он был добавлен нажатием кнопки. Вам необходимо внедрить Click Listener –

1

Button btn=new Button(this) на самом деле ссылается на ваш кликлинист, вы должны сослаться на свой class, Button btn=new Button(classname.this) или создать простую функцию снаружи clickListener.

1

Просто передать контекст в новой кнопки() и установить макет Params вместо высоты и ширины

for (int i = 0; i < tabButtonNames.length; i++) { 
       Button btnTag = new Button(<-Context->);//You need to pass context just write <ActivityName>.this 
       btnTag.setText(tabButtonNames[i]); 
       LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(<width>,<height>);(50,40) 


       //btnTag.setWidth(50); 
       //btnTag.setHeight(14); 
       btnTag.setTextSize(8); 
       btnTag.setId(i); 
       btnTag.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View arg0) { 

         } 



       }); 
       tabView.addView(btnTag); 
       btnTag.setLayoutParams(params) 
} 
Смежные вопросы