从Android

时间:2017-02-21 11:55:23

标签: android

我正在使用自定义适配器在listview中显示联系人,我创建了onClick功能,当任何项目点击时打开自定义对话框。之后,我想从对话框中获取联系人号码,但是当我尝试将其设置为错误弹出窗口时。

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

自定义对话框

<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都是两个不同的文件

3 个答案:

答案 0 :(得分:0)

请按以下方式输入

来自定义视图
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_filter, parent, false);

然后

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

答案 1 :(得分:0)

您不需要自定义适配器中的etxtContactNumber文本。

您必须创建一个customDialog.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();

希望这能解决您的问题。

答案 2 :(得分:0)

如果您想在customAdapter中创建dialog并想要获取MainActivity中的值,只需创建public static对话框并在承包商中初始化

自定义适配器

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

主要活动

  dialog.findViewById(R.id.etxtContactNumber);