2016-07-21 62 views
0

我一直在寻找,我没有找到方法。我找到的解决方案不起作用,或者我不知道如何实施它们。从EditText获取文本到字符串到另一个活动

我的主要活动

public class MainActivity extends AppCompatActivity { 



@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     EditText txtDescription = (EditText) findViewById(R.id.nameE); 
     final String nameE2 = txtDescription.getText().toString(); 

     Button bVerify = (Button) findViewById(R.id.verifyB); 
     bVerify.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       /** Called when the user clicks the Next button */ 
       Log.d("EditText", nameE2); 
       Intent intent = new Intent(MainActivity.this, ResultActivity.class); 
       intent.putExtra(EXTRA_MESSAGE, nameE2); 
       startResultActivity(null); 
      } 
     }); 
    } 

    public void startResultActivity(View view){ 
     Intent sra = new Intent(this, ResultActivity.class); 
     startActivity(sra); 

    } 
    } 

这一点,已经在我的代码,是2级的解决方案,我发现everywere,但我不知道如何使用它们:

EditText txtDescription = (EditText) findViewById(R.id.nameE); 
    String nameE2 = txtDescription.getText().toString(); 

&

Log.d("EditText", nameE2); 
     Intent intent = new Intent(MainActivity.this, ResultActivity.class); 
     intent.putExtra(EXTRA_MESSAGE, nameE2); 

在activity_main里面,我有这个EditText和这个按钮:

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="textPersonName" 
    android:text="Name" 
    android:ems="10" 
    android:id="@+id/nameE" 
    android:layout_below="@+id/NameTxt" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:editable="false" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/verifyB" 
    android:layout_alignParentStart="true" 
    android:text="@string/verifyB" 
    android:layout_alignParentEnd="true" 
    android:layout_below="@+id/nameE" 
    android:layout_alignParentLeft="true" /> 

在“灵活性”布局我有这PlainText。在这一个中,我想添加来自其他活动/布局的EditText输入。

<TextView 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello + nameE2 + . Are you sure you want to accept these terms?" 
    android:id="@+id/textView" 
    android:textSize="20dp" 
    android:textColor="@color/abc_input_method_navigation_guard" /> 

“nameE2”必须是EditText的字符串。

我很想知道如何解决它。

在此先感谢。如果你需要额外的数据,告诉我。

+0

startResultActivity(NULL);空值 ??? –

+0

为什么你做了这个方法startResultActivity(null); ?? !! –

+0

@AkashDubey 因为如果我把: startResultActivity(intent); 它标记为红色,并将鼠标放在框中说: MainActivity中的startResultActivity(android.view.View)不能应用于(android.content.Intent) –

回答

1

这似乎很好,用少许修改。

bVerify.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     /** Called when the user clicks the Next button */ 
     Log.d("EditText", nameE2); 
     Intent intent = new Intent(MainActivity.this, ResultActivity.class); 
     intent.putExtra(EXTRA_MESSAGE, nameE2); 
     startResultActivity(null); 
    } 
}); 

这里,而不是通nullstartResultActivity(),通过创建意图与此类似:

bVerify.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     final String nameE2 = txtDescription.getText().toString(); 
     /** Called when the user clicks the Next button */ 
     Log.d("EditText", nameE2); 
     Intent intent = new Intent(MainActivity.this, ResultActivity.class); 
     intent.putExtra(EXTRA_MESSAGE, nameE2); 
     startResultActivity(intent); 
    } 
}); 

而且startResultActivity()方法必须是这样的:

public void startResultActivity(Intent intent){ 

    startActivity(intent); 

} 

编辑: 正如我所提到的,你不能直接在布局文件中使用你的变量。

你必须动态设置它。你可以在你的ResultActivity的onCreate()方法中做到这一点。它有类似于此:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ractivity); // your second layout file 

    TextView textView = (TextView) findViewById(R.id.textView); 
    String stringResult = getIntent().getStringExtra(EXTRA_MESSAGE); 
    String textViewText = "Hello "+ stringResult +". Are you sure you want to accept these terms?"; 
    textView.setText(textViewText); 

} 

如果你的第二个布局文件有一个Textview的TextView ID这将工作。

+0

谢谢!就是这样。我不得不改变意图,也必须改变startResultActivity方法。 现在我认为字符串传递给ResultActivity,但我不知道如何将该字符串放在布局中的plainText中。 '' 它不工作 –

+0

从您的布局文件,你不能请参阅您的活动中的变量。如果您想在新的活动中显示传递的字符串,则必须动态设置它。在你的'ResultActivity'中,在'onCreate()'方法中添加如下代码:'TextView textView = findViewById(R.id.textView); String stringResult = getIntent()。getStringExtra(EXTRA_MESSAGE); textView.setText(stringResult);' – Rashin

+0

这工作,我只好把 '的TextView的TextView =(TextView的)findViewById(R.id.textView);' 因为没有'(TextView的)'我得到了一个警告。 现在我只需要知道如何将字符串放在布局上,因为它不会让我引用'stringResult'。对不起,知道这么少。谢谢,你帮了我很多。 '' –

0

试试这个代码:

public class MainActivity extends AppCompatActivity { 

     @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 

       EditText txtDescription = (EditText) findViewById(R.id.nameE); 
       final String nameE2 = txtDescription.getText().toString(); 

       Button bVerify = (Button) findViewById(R.id.verifyB); 
       bVerify.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
         /** Called when the user clicks the Next button */ 
         Log.d("EditText", nameE2); 
         Intent intent = new Intent(MainActivity.this, ResultActivity.class); 
         intent.putExtra(EXTRA_MESSAGE, nameE2); 
         startActivity(intent); 
        } 
       }); 
      } 


      } 
1

使用

startActivity(intent); 

代替

startResultActivity(null); 

Button onClick

+0

因为如果我把:startResultActivity(intent);它标记为红色,并将鼠标放在框中说:MainActivity中的startResultActivity(android.view.View)不能应用于(android.content.Intent) –

+0

无需放置'startResultActivity(intent)'。只要把startActivity(intent); –

+0

谢谢,这是错误的一部分 我认为字符串传递给ResultActivity,但我不知道如何将该字符串放置在布局的plainText中。 ''不起作用 –

0

改变onClickListener到

bVerify.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      /** Called when the user clicks the Next button */ 
      final String nameE2 = txtDescription.getText().toString(); 
      Log.d("EditText", nameE2); 
      Intent intent = new Intent(MainActivity.this, ResultActivity.class); 
      intent.putExtra(EXTRA_MESSAGE, nameE2); 
      startActivity(intent); 
     } 
}); 

你得到在启动文本时,它没有任何文本,以便移动

final String nameE2 = txtDescription.getText().toString(); 

内bVerify观点的onClick所以它会在客户端读取当前的文本点击按钮

+0

谢谢,这是错误的一部分 我认为字符串传递给ResultActivity,但我不知道如何将该字符串放在布局的plainText中。 ''不起作用 –

0

startResultActivity(null);更改为startActivity(intent);。 然后在你需要使用该字符串的其他活动:

Intent intent = getIntent(); 
String getExtra = intent.getStringExtra("EXTRA_MESSAGE"); 
TextView.setText(getExtra); 
+0

我做到了。公共类ResultActivity延伸AppCompatActivity { @Override public void onCreate(Bundled savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.ractivity); Intent intent = getIntent(); String getExtra = intent.getStringExtra(“EXTRA_MESSAGE”); TextView.setText(getExtra); } }' setText得到警告: “不能从静态内容引用” 我该如何解决这个问题? 谢谢,这有帮助 –

+0

你的“活力”的TextView的id是textView,是否正确?尝试将'TextView.setText(getExtra)'改为'textView.setText(getExtra)'。如果你没有投它,请执行以下操作:'TextView textView =(TextView)findViewById(R.id.textView);' – jlively

+0

这有帮助,谢谢;) –

相关问题