Не удается добавить представление в макет XML из кода - PullRequest
1 голос
/ 30 ноября 2011

У меня есть код:

public class ContentEditText extends EditText {
/*
 * Constructors
 */
public ContentEditText(Context context, AttributeSet attrs, int defStyle)
{
    super(context, attrs, defStyle);
}

public ContentEditText(Context context, AttributeSet attrs)
{
    super(context, attrs);
}

public ContentEditText(Context context)
{
    super(context);
}

/*
 * Listener
 */
@Override   
protected void onSelectionChanged(int selStart, int selEnd)
{ 
    Toast.makeText(getContext(), "selStart is " + selStart + "selEnd is " + selEnd, Toast.LENGTH_LONG).show();
}   
}

и

public class Main extends Activity {
private LinearLayout mainLayout;
private Button bBT;
private Button uBT;
private Button iBT;
private Button lBT;
private EditText titleET;
private ContentEditText contentET;
private Markup markup;

/** onCreate Function */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    initLayout();     
    setContentView(mainLayout);           
}

private void initLayout()
{
    // initialize some components by XML layout
    mainLayout = (LinearLayout) findViewById(R.id.main_layout);
    bBT = (Button) findViewById(R.id.boldBT);
    uBT = (Button) findViewById(R.id.underlineBT);
    iBT = (Button) findViewById(R.id.italicBT);
    lBT = (Button) findViewById(R.id.listBT);
    titleET = (EditText) findViewById(R.id.titleET);
    // initialize a EditText programmatically
    contentET = new ContentEditText(this);
    contentET.setGravity(Gravity.TOP);
    contentET.setLayoutParams(new LinearLayout.LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    // add the EditText to the main layout
    mainLayout.addView(contentET);
}

Я думал, что правильно добавляю contentET в основной макет, но он не работает, LogCat сказал «NullPointerException» для переменной contentET, я не знаю почему. Кто-нибудь может сказать мне, где я сделал не так? Спасибо!

1 Ответ

2 голосов
/ 30 ноября 2011

Измените свой код на это, так как первый вызов должен быть setContentView после super.Так как в приведенном выше коде это не так, вы пытаетесь получить доступ к макету без inflating, поэтому он выдает nullpointer исключение

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_xml_file);           
    initLayout();
}
...