簡體   English   中英

onClick:Android Studio中的EditText為空

[英]onClick : EditText empty in android studio

我有最簡單的代碼,它以前曾經工作過,但現在由於某種原因,它不能工作,我不知道為什么! 這個問題很難用谷歌搜索。

我無法從EditText獲取文本。 我創建了一個新項目,已經從另一個項目中復制了確切的代碼(在該項目中可以使用),但是在這里它不起作用。 我希望問題確實很明顯,而且我盯着它看了太久了。

    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;

    public class MainActivity extends Activity {
    String artist;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText edit = (EditText) findViewById(R.id.artistEditText);
        artist = edit.getText().toString();

    }

    protected void tryLetter(View v){
        System.out.println(artist);
        Log.d("string", artist);
        System.out.println("hi");
    }
}

當我按下一個按鈕時,打印藝術家的println根本不會顯示,並且Log.dtryletter也不會被調用。

如果有區別,請參見以下布局文件。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Ange en artist:"
    android:id="@+id/artistTextLabel"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="30dp" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/artistEditText"
    android:layout_alignBottom="@+id/artistTextLabel"
    android:layout_alignEnd="@+id/searchBtn" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sök"
    android:id="@+id/searchBtn"
    android:onClick="tryLetter"
    android:layout_below="@+id/artistEditText"
    android:layout_centerHorizontal="true" />
</RelativeLayout>

把這位artist = edit.getText().toString(); 在該tryLetter因為執行操作時需要從EditText提取文本,這意味着onClick並將tryLetter方法public

因為它僅在您的方法public時才起作用

所以用這個

public void tryLetter(View v){
    artist = edit.getText().toString();
    System.out.println(artist);
    Log.d("string", artist);
    System.out.println("hi");
}

而不是protected void tryLetter(View v){

在像您這樣的簡單場景中,需要觸發一些操作才能從EditText獲取數據。 最好的方法是將獲取代碼放置在觸發器中,比如說一個Button的代碼塊中,或者放在一個監聽器中

在您的示例中,有兩個錯誤:

  1. 方法tryLetter具有保護修飾符。 那不會使這個
    布局可見的方法。 並且您得到例外:
    IllegalStateException異常。 通過公開發布解決方案。
  2. 您可以將EditText的不可變值內容作為字符串保存在onCreate中,方法是將其分配給artist。 默認情況下為空,以后在將內容插入EditText時將不會更改。 解決方案將是持有
    EditText並從中為每次單擊動態提取String。

這是帶有兩個修復程序的代碼:

導入android.os.Bundle; 導入android.support.v7.app.AppCompatActivity; 導入android.util.Log; 導入android.view.View; 導入android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    private EditText edit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         edit = (EditText) findViewById(R.id.artistEditText);
    }

    public void tryLetter(View v){
        String artist=edit.getText().toString();
        System.out.println(artist);
        Log.d("string", artist);
        System.out.println("hi");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM