2010-12-30 2 views
0

У меня есть пользовательский диалог внутридоступа EditText.getText(). ToString() внутри какого-нибудь другого класса

public class NewPartnerDialog extends Dialog implements OnClickListener 

И я зову его из другого класса (активность)

private void showCustomDialog() { 
    NewPartnerDialog customDialog = new NewPartnerDialog(this); 
    customDialog.show(); 
} 

И это работает (он показывает), но у меня есть небольшая проблема. В нем у меня есть 3 поля EditText. Как я могу вернуть эти типизированные значения и передать их в какой-то другой класс-конструктор. Вот код.

public class NewPartnerDialog extends Dialog implements OnClickListener { 
public NewPartnerDialog(Context context) { 
    super(context); 
    mainContext = context; 

    setContentView(R.layout.dialog_new_partner); 
    setTitle("Dialog"); 

    finish = (Button) findViewById(R.id.finish); 
    cancel = (Button) findViewById(R.id.finish); 
    finish.setOnClickListener(this); 
    cancel.setOnClickListener(this); 

    name = (EditText) findViewById(R.id.name); 
    address = (EditText) findViewById(R.id.address); 
    city = (EditText) findViewById(R.id.city); 
} 

@Override 
public void onClick(View v) {  
    if (v == finish) { 
     Partner.addNewPartner(mainContext, name.getText().toString(), address.getText().toString(), city.getText().toString()); 
    } else if (v == cancel) { 
     dismiss(); 
    } 
} 

private static EditText name; 
private static EditText address; 
private static EditText city; 
private static Context mainContext; 
private Button finish; 
private Button cancel; 

}

Ошибка obivusly здесь

if (v == finish) { 
     Partner.addNewPartner(mainContext, name.getText().toString(), address.getText().toString(), city.getText().toString()); 
    } 

, потому что он говорит NullPointerException, но как это исправить?

+0

Что такое «Партнер»? – Falmarri

+0

только некоторые вспомогательные классы. все, что имеет значение, - это аргументы (Context, String, String, String). Если я заменил этот последний фрагмент кода на «Partner.addNewPartner (mainContext,« ABC »,« ABCD »,« ABCDE »); все работает отлично. – svenkapudija

ответ

1

Try делая имя, адрес и город окончательными:

private static final EditText name, address, city; 

Не уверен, что будет делать трюк, но вы можете попробовать.

РЕДАКТИРОВАТЬ: Возможно, вам понадобится также сделать finish и cancel.

+0

Но если я сделаю их окончательными, я не могу назначить им виды - «name = (EditText) findViewById (R.id.name);» потому что они уже окончательные (константы). Проблема в том, что метод onClick принимает пустые параметры (имя, адрес, город), а не тот, который определен в конструкторе. – svenkapudija

+0

Вы все равно сможете назначить их в конструкторе; они не заблокированы от изменения, пока вы не назначили их один раз. Вам может и не понадобиться модификатор 'static'. Попробуйте просто «private final EditText». Я бы испытал, мог ли я, но у меня нет Eclipse на работе. – kcoppock

+0

Да, без статики я могу назначить их один раз, но все равно не работает. Я не понимаю, у меня есть константа и пустые переменные имя, адрес, город. Я вызываю конструктор и инициализирую эти переменные в их представлениях. Но onClick просто не собирает их? EDIT: В журнале это просто (любая из этих трех переменных) ... null. – svenkapudija

Смежные вопросы