2017-02-21 2 views
0

Я использую пользовательский адаптер для отображения контактов в списке, и я создаю функцию onClick, которая открывает настраиваемый диалог при нажатии любого элемента. После этого я хочу получить номер контакта из диалогового окна, но когда я попытаюсь получить его всплывающее окно с ошибкой.Получить значение из пользовательского диалогового окна в Android

IllegalStateException: Could not execute method for android:onClick 

Пользовательские Диалог От Настраиваемый адаптер

// Other code 
// This code is working fine problem is in activity class 
public void onClick(View v) { 
       Toast.makeText(context, "Item click", Toast.LENGTH_SHORT).show(); 
       String phoneNumber = phone.getText().toString(); 
       String userName = name.getText().toString(); 
       final Dialog dialog = new Dialog(context); 
       dialog.setContentView(R.layout.custom_dialog); 
       dialog.setTitle(userName); 
       EditText etxtContactNumber = (EditText) dialog.findViewById(R.id.etxtContactNumber); 
       etxtContactNumber.setText(phoneNumber); 
       dialog.show(); 
      } 
// reset of the code 

Пользовательские Dialog

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textPersonName" 
    android:text="Name" 
    android:ems="10" 
    android:id="@+id/etxtContactNumber" /> 

<Button 
    android:text="Send SMS" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/btnSendMessage" 
    android:onClick="sendMessage" /> 

<Button 
    android:text="Phone Call" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/btnPhoneCall" 
    android:onClick="phoneCall" /> 

Основная деятельность

protected void sendMessage(View view){ 
    Toast.makeText(this, "Send Message", Toast.LENGTH_SHORT).show(); 
    EditText etxtContactNumber = (EditText) view.findViewById(R.id.etxtContactNumber); 
    String phoneNumber = etxtContactNumber.getText().toString(); 
    String uri= "smsto:"+phoneNumber; 
    Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri)); 
    startActivity(intent); 
} 

Я знаю, причина ошибки etxtContactNumber в этом виде. Это также не в основном представлении активности, а затем, где я могу его получить.
Пользовательские адаптер и MainActivity как два различных файла

+0

использовать 'pub lic void sendMessage' –

+0

'public' не работает –

ответ

0

Если вы хотите создать dialog в customAdapter и хотите получить значение в MainActivity просто создать диалог, как public static и инициализировать его подрядчику

Выборочная адаптер

public static Dialog dialog; 
    customAdapter(Context ctx){ 
     dialog = new Dialog(ctx); 
    } 

Основная деятельность

dialog.findViewById(R.id.etxtContactNumber); 
0

Пожалуйста, нам строку ниже, чтобы infalte пользовательский вид на

View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_filter, parent, false); 

и после того, как затем

EditText etxtContactNumber = (EditText)v.findViewById(R.id.etxtContactNumber); 
0

Вам не нужно to etxtContactNumber текст из вашего пользовательского адаптера.

Вы должны создать собственный классDialog.java и сделать под кодом на onCreate().

setContentView(R.layout.custom_dialog); 
setTitle(userName); 
EditText etxtContactNumber =(EditText)findViewById(R.id.etxtContactNumber); 
etxtContactNumber.setText(phoneNumber); 

Вы должны сделать под кодом на onClick пользовательского адаптера.

final Dialog dialog = new Dialog(context); 
dialog.show(); 

Надеюсь, это исправит вашу проблему.