【问题标题】:Beginner with Android Development having troubleAndroid 开发初学者遇到问题
【发布时间】:2014-09-15 00:20:28
【问题描述】:

您好,我正在申请家庭作业,现在在墙上。我想输入两个输入,例如某人的姓名,然后发送电子邮件,然后显示带有姓名和电子邮件的感谢消息。我有这个感谢页面,当我单击它时,我无法让我的按钮执行任何操作。我有这个代码,我没有出现任何错误。

      import android.support.v7.app.ActionBarActivity;
  import android.os.Bundle;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.widget.TextView;

  public class SignupActivity extends ActionBarActivity {

    TextView greetMessage;

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

        Bundle bundle = this.getIntent().getExtras();
        if(null != bundle){
            String name = bundle.getString("name");
            String email = bundle.getString("email");
            if(null != name && name != "" && email != "") {
                greetMessage = (TextView)findViewById(R.id.textView1);
                greetMessage.setText("Thank you " + name + "you can expect and email from us soon to       
  your email address at " + email);
            }
        }



    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.signup, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    }

和我其他活动的其他代码

       import android.support.v7.app.ActionBarActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;

    public class ThankYouActivity extends ActionBarActivity implements OnClickListener {

    EditText nameField;
    EditText emailField;
    Button submitButton;


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

        emailField = (EditText) findViewById(R.id.editText2);
        nameField = (EditText) findViewById(R.id.editText1);
        submitButton = (Button) findViewById(R.id.button1);

        submitButton.setOnClickListener(this);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_enter, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {

        String name = nameField.getText().toString();
        String email = emailField.getText().toString();
        if (null != name && name != "" && email != "") {
            Intent intent = new Intent(this,ThankYouActivity.class);
            intent.putExtra("name", name);
            this.startActivity(intent);
        }

    }
   }

感谢您提前提出的任何建议。

【问题讨论】:

    标签: java android eclipse import


    【解决方案1】:

    你在两个活动中都有:

    setContentView(R.layout.layout_signup);
    

    将其更改为您的其他 xml 布局。

    编辑: 您不会通过意图传递电子邮件,在传递名称下方:

    intent.putExtra("name", name);
    

    这样写:

    intent.putExtra("emial", email);
    

    应该是这样的:

        public void onClick(View v){
    
        String name = nameField.getText().toString();
        String email = emailField.getText().toString();
        if (null != name && name != "" && email != "") {
            Intent intent = new Intent(this,ThankYouActivity.class);
            intent.putExtra("name", name);
            intent.putExtra("emial", email);
            this.startActivity(intent);
        }
    }
    

    EDIT2: 在 onClick 的第 4 行中,将 'this' 更改为 getApplicationContext(),如下所示:(如果可以)

        Intent intent = new Intent(getApplicationContext(),ThankYouActivity.class);
    

    在最后一行删除'this',它应该是这样的:

        startActivity(intent);
    

    【讨论】:

    • 感谢您指出这一点。输入姓名和电子邮件后,我仍然无法从提交按钮收到回复?
    • 您不会通过意图传递电子邮件,在传递名称下方放置:intent.putExtra("email", email);
    • 好的。由于我的提交按钮没有响应,我仍然需要进行更多调试。
    • 好的,请稍等,我再次编辑我的答案,并告诉我它是否有效:)
    • 没用:/顺便说一句,我真的很感谢您的帮助。你认为这可能是我的布局中的一些东西?
    【解决方案2】:

    好的,所以你的名字有点混乱:P 因为,SignupActivity 指的是 activity_thank_you,ThankYouActivity 指的是 layout_signup

    在您的 SingupActivity 中更改:

        setContentView(R.layout.layout_signup); //WAS
    
        setContentView(R.layout.activity_thank_you); //SHOULD BE
    

    在您的 SignupActivity 中更改:

        setContentView(R.layout.layout_signup); //WAS
    
        setContentView(R.layout.activity_thank_you); //SHOULD BE
    

    在 activity_thank_you 中,您创建了 TextView,但您没有为其设置 id,因此将其更改为:

       <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:id="@+id/randomName"/>
    

    当你将它添加到 textview 时,转到 SignupActivity 并加入它:

        greetMessage = (TextView)findViewById(R.id.randomName);
    

    另外,不要忘记在 Android Manifest 中更改名称。

    并且在onClick方法中在startActivty之前删除这个,像这样:

    this.startActivity(intent); //WAS
    
    startActivity(intent); //SHOULD BE
    

    【讨论】: