รับค่าของฟิลด์แก้ไขข้อความ


439

ฉันกำลังเรียนรู้วิธีสร้างองค์ประกอบ UI ฉันได้สร้างฟิลด์อินพุต EditText สองสามฟิลด์ เมื่อคลิกปุ่มฉันต้องการบันทึกเนื้อหาที่พิมพ์ลงในช่องป้อนข้อมูลนั้น

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

นั่นคือสนามของฉัน ฉันจะรับเนื้อหาได้อย่างไร


21
จำนวนของการ upvotes ค่อนข้างพิสูจน์ได้ว่าการเอาชนะtoStringไม่ได้ให้ API ที่ค้นพบได้มากที่สุดอย่างไรก็ตามความแฟนซีคือเทคนิค
vemv

29
ไวยากรณ์และความเชื่อมั่นในความคิดเห็นของคุณนั้นยากที่จะเข้าใจจริงๆ ...
IcedDante

7
@vemv ปัญหาเกี่ยวกับ API กำลังส่งคืนEditableออบเจกต์ที่ผู้ใช้คาดหวังและต้องการเวลาString99% ที่เรียบง่าย
Amir Ali Akbari

ฉันคิดว่า Android เจ๋ง แต่ฉันประหลาดใจที่ฉันต้องใช้ Google สำหรับสิ่งนี้ (และวิธีการตรวจสอบเมื่อค่ามีการเปลี่ยนแปลงและพร้อมที่จะอ่านออกซึ่งอาจมีความซับซ้อน) ฉันคิดว่าพวกเขาทำมันยากกว่าที่จำเป็น!
nsandersen

คำตอบ:


685

โดยใช้ 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
หากคุณไม่ได้วาง EditText ไว้ในขอบเขตทั่วทั้งองค์กรและประกาศใน OnCreate แทนต้องการให้ประกาศเป็นขั้นสุดท้าย ฉันคิดว่ามันจะดีกว่าถ้าจะไม่ทำให้มันจบ แต่เป็นวิธีเดียวที่จะทำได้ การทำให้ทั่วทั้งคลาสเป็นวิธีที่ดีที่สุดในการทำสิ่งนี้หรือไม่?
PFranchise

1
@PFranchise คุณหมายความว่าอย่างไร "class-wide"? แพคเกจที่มีการป้องกัน (ตามตัวอย่าง)? เอกชน? ทำไมคุณไม่ต้องการให้วิดเจ็ตเข้าถึงได้ทั้งชั้น?
Zelphir Kaltstahl

3
<rant> ไม่ใช่คำขอข้อมูลหรือคำแนะนำเพิ่มเติม ยังไม่ขอบคุณหรือ +1 นี่เป็นสิ่งที่น่ากลัว! ทำไมทุกคนถึงคิดว่านี่เป็นวิธีที่ถูกต้องในการออกแบบกล่องข้อความ นอกจากนี้ EditText เป็นชื่อที่เข้าใจง่ายที่สุดที่พวกเขาสามารถหาได้ </rant>
Roy Falk

22

ฉันเดาว่าคุณจะต้องใช้รหัสนี้เมื่อเรียก "mEdit" วัตถุ EditText ของคุณ:

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

เพียงตรวจสอบให้แน่ใจว่าคอมไพเลอร์ทราบว่าEditTextจะโทรและใช้


7
คุณควรเพิ่มคำอธิบายว่า "mEdit" มาจากไหน
null

18

รับค่าจากการEditTextควบคุมใน Android EditText getTextคุณสมบัติใช้เพื่อรับค่าและEditText:

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

11

ฉันหวังว่าอันนี้ควรทำงาน:

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

ฉันลองInteger.getInteger()วิธีแทนvalueOf()- มันไม่ได้ผล


9
นี่เป็นการสมมติว่าค่านั้นเป็นจำนวนเต็ม ... ไม่แน่ใจว่าคุณเลือกมันมาจากคำถามที่ใด
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

นอกจากนี้คุณยังอาจต้องการที่จะดูที่บัตเตอร์มีด มันมีจุดมุ่งหมายที่จะลดจำนวนรหัสสำเร็จรูปโดยใช้คำอธิบายประกอบ นี่คือตัวอย่างง่ายๆ:

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();
    }
}

เพียงเพิ่มการพึ่งพาต่อไปนี้ในbuild.gradle:

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

เป็นทางเลือกที่ยังมีAndroidAnnotations


5

สั้นและง่ายที่สุด

getText(editText);

getText(button);

getText(textView);

วิธีแก้ปัญหาเล็กน้อย

เพียงสร้างวิธีใน BaseActivity / สร้าง BaseActivity หากคุณไม่มี

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

และขยายกิจกรรมทั้งหมดของคุณโดย BaseActivity นี้

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

โปรดทราบว่าEditText, Buttonขยายดังนั้นฉันสร้างขึ้นเฉพาะTextViewgetText(TextView tv)


2

วิธีขั้นสูงเพิ่มเติมคือการใช้ butterknife bindview สิ่งนี้จะกำจัดรหัสซ้ำซ้อน

ในระดับของคุณภายใต้การพึ่งพา เพิ่ม 2 บรรทัดนี้

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

จากนั้นซิงค์ ตัวอย่างการรวม edittext ใน MainActivity

import butterknife.BindView;   
import butterknife.ButterKnife; 

public class MainActivity {

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

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

}

แต่นี่เป็นอีกทางเลือกหนึ่งเมื่อคุณรู้สึกสบายใจหรือเริ่มทำงานกับข้อมูลจำนวนมาก


1

ขั้นตอนที่ 1: สร้างโครงร่างด้วยชื่อ 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>

ขั้นตอนที่ 2: สร้างคลาส 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);
            }
        });
 }
}


0

ลองรหัสนี้

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();
        }
    });
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.