Nhận giá trị của trường Chỉnh sửa văn bản


439

Tôi đang học cách tạo các yếu tố UI. Tôi đã tạo ra một vài trường đầu vào EditText. Khi nhấp vào nút, tôi muốn chụp nội dung được nhập vào trường nhập đó.

<EditText android:id="@+id/name" android:width="220px" />

Đó là lĩnh vực của tôi. Làm thế nào tôi có thể nhận được nội dung?


21
Sự xuất hiện của upvote phần nào chứng minh rằng việc ghi đè toStringkhông mang lại API dễ khám phá nhất, tuy nhiên điều thú vị là kỹ thuật.
vemv

29
Ngữ pháp và tình cảm trong nhận xét của bạn thực sự khó hiểu ...
IcedDante

7
@vemv Vấn đề với API là trả về một Editableđối tượng mà người dùng mong đợi và cần String99% đơn giản .
Amir Ali Akbari

Tôi nghĩ Android rất tuyệt, nhưng tôi ngạc nhiên khi tôi phải tìm kiếm Google (và cách phát hiện khi giá trị thay đổi và sẵn sàng để đọc, điều này có thể phức tạp). Tôi nghĩ rằng họ đã làm điều này khó hơn cần thiết!
nsandersen

Câu trả lời:


684

Bằng cách sử dụng getText ():

Button   mButton;
EditText mEdit;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mButton = (Button)findViewById(R.id.button);
    mEdit   = (EditText)findViewById(R.id.edittext);

    mButton.setOnClickListener(
        new View.OnClickListener()
        {
            public void onClick(View view)
            {
                Log.v("EditText", mEdit.getText().toString());
            }
        });
}

7
Nếu bạn không đặt EditText trong phạm vi toàn clas, và thay vào đó khai báo nó trong OnCreate, nó muốn nó được khai báo là cuối cùng. Tôi cho rằng tốt hơn là không làm cho nó cuối cùng, nhưng là cách duy nhất để làm như vậy, để làm cho nó toàn lớp? IS làm cho nó toàn lớp là cách tốt nhất để làm điều này?
PFranchise

1
@PFranchise Bạn có ý nghĩa gì với "toàn lớp"? Gói được bảo vệ (như trong ví dụ)? Riêng tư? Tại sao bạn không muốn có một widget có thể truy cập trong cả lớp?
Zelphir Kaltstahl

3
<rant> Không phải là yêu cầu để biết thêm thông tin hoặc đề xuất. Cũng không phải là một lời cảm ơn hay +1. ĐIỀU NÀY THẬT TỒI TỆ! Tại sao mọi người sẽ nghĩ rằng đây là cách đúng để thiết kế một hộp văn bản. Ngoài ra, EditText là tên ít trực quan nhất mà họ có thể tìm thấy. </ rant>
Roy Falk

22

Tôi đoán bạn sẽ phải sử dụng mã này khi gọi "mEdit" đối tượng EditText của bạn:

myActivity.this.mEdit.getText().toString()

Chỉ cần chắc chắn rằng trình biên dịch biết EditTextnên gọi và sử dụng.


7
bạn nên thêm lời giải thích "mEdit" đến từ đâu.
null

18

Nhận giá trị từ một EditTextđiều khiển trong Android. EditText getTextsử dụng tài sản để nhận giá trị an EditText:

EditText txtname = findViewById(R.id.name);
String name      =  txtname.getText().toString();

11

Tôi hy vọng cái này sẽ hoạt động:

Integer.valueOf(mEdit.getText().toString());

Tôi đã thử Integer.getInteger()phương pháp thay vì valueOf()- nó không hoạt động.


9
Điều này giả sử giá trị là một số nguyên ... không chắc bạn đã chọn nó ở đâu trong câu hỏi.
Joshua Pinter

9
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

  Button  rtn = (Button)findViewById(R.id.button);
  EditText edit_text   = (EditText)findViewById(R.id.edittext1);

    rtn .setOnClickListener(
        new View.OnClickListener()
        {
            public void onClick(View view)
            {
                Log.v("EditText value=", edit_text.getText().toString());
            }
        });
}

7

Bạn cũng có thể muốn xem qua Butter Knife . Nó nhằm mục đích giảm số lượng mã soạn sẵn bằng cách sử dụng chú thích. Đây là một ví dụ đơn giản:

public class ExampleActivity extends ActionBarActivity {

    @InjectView(R.id.name)
    EditText nameEditText;

    @InjectView(R.id.email)
    EditText emailEditText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);
        Butterknife.inject(this);
    }

    @OnClick(R.id.submit)
    public void onSubmit() {
         Editable name = nameEditText.getText();
         Editable email = emailEditText.getText();
    }
}

Chỉ cần thêm phụ thuộc sau vào build.gradle:

compile 'com.jakewharton:butterknife:x.y.z'

Thay thế cũng có AndroidAnnotations .


5

Ngắn nhất & Đơn giản nhất

getText(editText);

getText(button);

getText(textView);

Giải pháp nhỏ

Chỉ cần tạo phương thức trong BaseActivity / tạo BaseActivity nếu bạn không có.

public class BaseActivity extends AppCompatActivity{
    public String getText(TextView tv) {
        return tv.getText().toString().trim();
    } 
}

Và mở rộng tất cả các hoạt động của bạn bằng BaseActivity này.

public class YourActivity extends BaseActivity {
  @Override
  public void onCreate(Bundle savedInstanceState){
     getText(editText);
     getText(button);
     getText(textView);
  }
}

Lưu ý rằng EditText, Buttonmở rộng TextView, vì vậy tôi chỉ tạo ra getText(TextView tv).


2

Một cách nâng cao hơn sẽ là sử dụng butterknife bindview. Điều này giúp loại bỏ mã dư thừa.

Trong lớp của bạn dưới sự phụ thuộc; thêm 2 dòng này

compile('com.jakewharton:butterknife:8.5.1') {
        exclude module: 'support-compat'
    }
apt 'com.jakewharton:butterknife-compiler:8.5.1'

Sau đó đồng bộ hóa. Ví dụ edittext ràng buộc trong MainActivity

import butterknife.BindView;   
import butterknife.ButterKnife; 

public class MainActivity {

@BindView(R.id.name) EditTextView mName; 
...

   public void onCreate(Bundle savedInstanceState){
         ButterKnife.bind(this); 
         ...
   }

}

Nhưng đây là một giải pháp thay thế một khi bạn cảm thấy thoải mái hơn hoặc bắt đầu làm việc với nhiều dữ liệu.


1

Bước 1: tạo bố cục với tên Activity_main.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    tools:context=".MainActivity"
    android:background="#c6cabd"
    >
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="17dp"
        android:textColor="#ff0e13"
        />
    <EditText
        android:id="@+id/et"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv"
        android:hint="Input your country"
        />
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Get EditText Text"
        android:layout_below="@id/et"
        />
</RelativeLayout>

Bước 2: Tạo lớp Main. Class

public class Main extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button) findViewById(R.id.btn);
        final TextView tv = (TextView) findViewById(R.id.tv);
        final EditText et = (EditText) findViewById(R.id.et);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String country = et.getText().toString();
                tv.setText("Your inputted country is : " + country);
            }
        });
 }
}

1

Chuỗi giá trị = YourEditText.getText (). ToString;


Làm thế nào để câu trả lời này khác với câu trả lời đã có?
Matt Ke

0

Hãy thử mã này

final EditText editText = findViewById(R.id.name); // your edittext id in xml
Button submit = findViewById(R.id.submit_button); // your button id in xml
submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) 
    {
        String string = editText.getText().toString();
        Toast.makeText(MainActivity.this, string, Toast.LENGTH_SHORT).show();
    }
});

-8
    Button kapatButon = (Button) findViewById(R.id.islemButonKapat);
    Button hesaplaButon = (Button) findViewById(R.id.islemButonHesapla);
    Button ayarlarButon = (Button) findViewById(R.id.islemButonAyarlar);

    final EditText ders1Vize = (EditText) findViewById(R.id.ders1Vize);
    final EditText ders1Final = (EditText) findViewById(R.id.ders1Final);
    final EditText ders1Ortalama = (EditText) findViewById(R.id.ders1Ortalama);

    //

    final EditText ders2Vize = (EditText) findViewById(R.id.ders2Vize);
    final EditText ders2Final = (EditText) findViewById(R.id.ders2Final);
    final EditText ders2Ortalama = (EditText) findViewById(R.id.ders2Ortalama);
    //
    final EditText ders3Vize = (EditText) findViewById(R.id.ders3Vize);
    final EditText ders3Final = (EditText) findViewById(R.id.ders3Final);
    final EditText ders3Ortalama = (EditText) findViewById(R.id.ders3Ortalama);
    //
    final EditText ders4Vize = (EditText) findViewById(R.id.ders4Vize);
    final EditText ders4Final = (EditText) findViewById(R.id.ders4Final);
    final EditText ders4Ortalama = (EditText) findViewById(R.id.ders4Ortalama);
    //
    final EditText ders5Vize = (EditText) findViewById(R.id.ders5Vize);
    final EditText ders5Final = (EditText) findViewById(R.id.ders5Final);
    final EditText ders5Ortalama = (EditText) findViewById(R.id.ders5Ortalama);
    //
    final EditText ders6Vize = (EditText) findViewById(R.id.ders6Vize);
    final EditText ders6Final = (EditText) findViewById(R.id.ders6Final);
    final EditText ders6Ortalama = (EditText) findViewById(R.id.ders6Ortalama);
    //
    final EditText ders7Vize = (EditText) findViewById(R.id.ders7Vize);
    final EditText ders7Final = (EditText) findViewById(R.id.ders7Final);
    final EditText ders7Ortalama = (EditText) findViewById(R.id.ders7Ortalama);
    //

    /*
     * 
     * 
     * */

    kapatButon.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // kapatma islemi
            Toast.makeText(getApplicationContext(), "kapat",
                    Toast.LENGTH_LONG).show();
        }
    });
    /*
     * 
     * 
     * */
    hesaplaButon.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // hesap islemi

            int d1v = Integer.parseInt(ders1Vize.getText().toString());
            int d1f = Integer.parseInt(ders1Final.getText().toString());
            int ort1 = (int) (d1v * 0.4 + d1f * 0.6);
            ders1Ortalama.setText("" + ort1);
            //
            int d2v = Integer.parseInt(ders2Vize.getText().toString());
            int d2f = Integer.parseInt(ders2Final.getText().toString());
            int ort2 = (int) (d2v * 0.4 + d2f * 0.6);
            ders2Ortalama.setText("" + ort2);
            //
            int d3v = Integer.parseInt(ders3Vize.getText().toString());
            int d3f = Integer.parseInt(ders3Final.getText().toString());
            int ort3 = (int) (d3v * 0.4 + d3f * 0.6);
            ders3Ortalama.setText("" + ort3);
            //
            int d4v = Integer.parseInt(ders4Vize.getText().toString());
            int d4f = Integer.parseInt(ders4Final.getText().toString());
            int ort4 = (int) (d4v * 0.4 + d4f * 0.6);
            ders4Ortalama.setText("" + ort4);
            //
            int d5v = Integer.parseInt(ders5Vize.getText().toString());
            int d5f = Integer.parseInt(ders5Final.getText().toString());
            int ort5 = (int) (d5v * 0.4 + d5f * 0.6);
            ders5Ortalama.setText("" + ort5);
            //
            int d6v = Integer.parseInt(ders6Vize.getText().toString());
            int d6f = Integer.parseInt(ders6Final.getText().toString());
            int ort6 = (int) (d6v * 0.4 + d6f * 0.6);
            ders6Ortalama.setText("" + ort6);
            //
            int d7v = Integer.parseInt(ders7Vize.getText().toString());
            int d7f = Integer.parseInt(ders7Final.getText().toString());
            int ort7 = (int) (d7v * 0.4 + d7f * 0.6);
            ders7Ortalama.setText("" + ort7);
            //




            Toast.makeText(getApplicationContext(), "hesapla",
                    Toast.LENGTH_LONG).show();
        }
    });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.