Во-первых, установите id вашего LinearLayout на что-то отличное от main.Как root
.Main - это имя xml-файла, содержащего ваш макет, а не идентификатор элемента LinearLayout.
Второе. Вместо использования this
в конструкторе для EditText используйте PlusbuttonActivity.this
.Поэтому измените строку, которую вы используете для создания EditText, следующим образом:
EditText t = new EditText(PlusbuttonActivity.this);
Вы должны сделать это, потому что когда вы используете метод onClick, вы технически в классе OnClickListener, а this
относится кОбъект OnClickListener.Используя PlusbuttonActivity.this
, вы поясняете, что имеете в виду объект PlusbuttonActivity
, в котором вы сейчас находитесь, а не OnClickListener.
В-третьих, для решения другой проблемы вы не можете ссылаться на root
от тебя анонимный класс OnClickListener.Вместо вызова root.addView(t)
вы можете извлечь это из метода.Собрав все это вместе, мы получим это:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
public class PlusbuttonActivity extends Activity {
/** Called when the activity is first created. */
LinearLayout root;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mButton = (Button) findViewById(R.id.button1);
root = (LinearLayout) findViewById(R.id.root);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText t = new EditText(PlusbuttonActivity.this);
t.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
addViewToRoot(t);
}
});
}
private void addViewToRoot(View v){
root.addView(v);
}
}