EditText getText返回空

时间:2013-05-05 17:30:23

标签: java android string android-edittext listener

希望我只是在愚蠢地传递一些东西。

问题:我的EditText(2)getText()在LISTENER中返回空字符串“”@ runtime。请查看onClick(...)

中的行

我怀疑它必须与我如何在Builder上的create()之后对searchDialog和setContentView进行膨胀,但是无法解决它。

CODE:

private void initSearch() {
    results = new ArrayList<Photo>();
    AlertDialog.Builder searchDialog = new AlertDialog.Builder(this);
    AlertDialog dialog = searchDialog.create();
    LayoutInflater inflater = this.getLayoutInflater();
    dialog.setContentView(R.layout.search_dialog);
    searchDialog.setView(inflater.inflate(R.layout.search_dialog, null));
    final EditText tagField = (EditText) dialog.findViewById(R.id.tagField);
    final EditText valueField = (EditText) dialog.findViewById(R.id.valueField);
    searchDialog.setTitle("Search Photos");
    searchDialog.setMessage("Specify tag and value...");
    searchDialog.setPositiveButton("Search", new DialogInterface.OnClickListener() {

        @Override
  public void onClick(DialogInterface dialog, int which) {
      try { // PROBLEM: first two lines
          String tag = tagField.getText().toString(); // TAG WILL BE EMPTY
    String value = valueField.getText().toString(); // VALUE WILL BE EMPTY
    String criteria = tag+":\""+value+"\"";
    ArrayList<String> tags = new ArrayList<String>();
          tags.add(criteria);
    HomeScreen.results = c.getPhotosByTag(tags);

    if(!tag.equalsIgnoreCase("person") || !tag.equalsIgnoreCase("location")){
        throw new IllegalArgumentException("Tag types can only be location or person");
    }else if(results.size() == 0) {
        throw new IllegalArgumentException("No results");
    }else {
        Intent intent = new Intent(HomeScreen.this,SearchResults.class);
        startActivity(intent);
          }
      } catch(Exception e) {
          dialog.dismiss();
    Utilities.createErrorDialog(HomeScreen.this, e.getMessage());
      }

        }
     });
    searchDialog.show();
}

这是XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/search_dialog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tagText" 
        android:padding="7dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:text="@string/tag" />
    <EditText 
        android:id="@+id/tagField"
        android:padding="7dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"/>
    <TextView
        android:id="@+id/valueText" 
        android:padding="7dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:text="@string/value" />
    <EditText 
        android:id="@+id/valueField"
        android:padding="7dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"/>
</LinearLayout>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

试试此代码 - &gt;

LayoutInflater inflater = this.getLayoutInflater();
    View view = inflater.inflate(R.layout.search_dialog, null);
    final EditText tagField = (EditText) view.findViewById(R.id.tagField);
    final EditText valueField = (EditText) view.findViewById(R.id.valueField);
    searchDialog.setView(view);

答案 1 :(得分:0)

尝试以下方面的内容:

private void initSearch() {
    results = new ArrayList<Photo>();
    AlertDialog.Builder searchDialog = new AlertDialog.Builder(this);
    AlertDialog dialog = searchDialog.create();
    LayoutInflater inflater = this.getLayoutInflater();
    View v = inflater.inflate(R.layout.search_dialog, null);
    searchDialog.setView(v);
    final EditText tagField = (EditText) v.findViewById(R.id.tagField);
    final EditText valueField = (EditText) v.findViewById(R.id.valueField);
    searchDialog.setTitle("Search Photos");
    searchDialog.setMessage("Specify tag and value...");
    searchDialog.setPositiveButton("Search", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        try { // PROBLEM: first two lines
              String tag = tagField.getText().toString(); // TAG WILL BE EMPTY
              String value = valueField.getText().toString(); // VALUE WILL BE EMPTY
              String criteria = tag+":\""+value+"\"";
              ArrayList<String> tags = new ArrayList<String>();
              tags.add(criteria);
              HomeScreen.results = c.getPhotosByTag(tags);

              if(!tag.equalsIgnoreCase("person") || !tag.equalsIgnoreCase("location")){
                  throw new IllegalArgumentException("Tag types can only be location or person");
              }else if(results.size() == 0) {
                  throw new IllegalArgumentException("No results");
              }else {
                  Intent intent = new Intent(HomeScreen.this,SearchResults.class);
                  startActivity(intent);
              }
        } catch(Exception e) {
            dialog.dismiss();
            Utilities.createErrorDialog(HomeScreen.this, e.getMessage());
        }

    }
    });
    searchDialog.show();
}