【问题标题】:Stuck on why my Android app won't work?坚持为什么我的 Android 应用程序无法运行?
【发布时间】:2012-12-19 03:54:01
【问题描述】:

我正在开发一个应用程序,它将执行以下操作:

  1. 允许第一个用户“Sam”在 editText 字段中输入他/她的消息。
  2. 按屏幕底部的“Alex”按钮启动新活动 ActivityAlex
  3. 允许用户“Alex”编辑 editText 字段。
  4. 按屏幕底部的“Sam”按钮重新启动 Activity MainActivity

到目前为止,我认为我已经完成了大部分工作,但我一直在纠结如何修复程序,以便它能够完成我想要它做的事情。

这是我的logcat

这是我的 MainActivity:

package com.chatfriends;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class MainActivity extends Activity {

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

    private Button alexButton; //initialize the buttons for "alex" and "sam"

    public void initialize(){

        alexButton = (Button) findViewById(R.id.button1); // initializing the buttons by location. Also need to define the button with two states (regular and yellow)

       alexButton.setOnClickListener(new OnClickListener(){
        public void onClick(View arg0){
        alexbutton(arg0);
        }

        public void alexbutton(View v) {
            Intent intent = new Intent(MainActivity.this, ActivityAlex.class); //the intent is telling the app what you want it to do. Think about setting the intent to the buttons.
            startActivity(intent);

        }
    });
  }
}

这是我的 ActivityAlex:

package com.chatfriends;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class ActivityAlex extends MainActivity {

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


        private Button samButton; //initialize the buttons for "alex" and "sam"

        public void initialize(){

            samButton = (Button) findViewById(R.id.button2); // initializing the buttons by location. Also need to define the button with two states (regular and yellow)

        samButton.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0){
            samButton(arg0);
            }

            public void samButton(View v) {
                Intent intent = new Intent(ActivityAlex.this, MainActivity.class); //the intent is telling the app what you want it to do. Think about setting the intent to the buttons.
                startActivity(intent);

            }
        });
    }
}

这是我的清单代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.chatfriends"
    android:versionCode="1"
    android:versionName="1.0" xmlns:tools="http://schemas.android.com/tools" tools:ignore="OldTargetApi">

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" tools:ignore="MissingPrefix"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
           <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ActivityAlex" />
    </application>

</manifest>

这里是 XML 布局文件。

activity_main:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

        <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="@string/userName1"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:ems="10"
        android:inputType="textMultiLine" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="26dp"
        android:layout_toRightOf="@+id/textView1"
        android:text="@string/button1"
        android:onClick="startalexbutton" />

</RelativeLayout>

activityalex.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ActivityAlex" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="@string/userName2"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:ems="10"
        android:inputType="textMultiLine" >
    </EditText>


    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="26dp"
        android:layout_marginRight="20dp"
        android:layout_toRightOf="@+id/textView1"
        android:text="@string/button2"
        android:onClick="startMainActivity" />

 </RelativeLayout>

【问题讨论】:

标签: android


【解决方案1】:
android:onClick="startalexbutton"

这告诉您的程序在按下时调用方法startalexbutton(),并且此方法必须采用View 参数(public void startalexbutton(View view))。

此方法将进入您的MainActivity 类;但是,由于您已经使用了setOnClickListener(),因此只需从您的 XML 中删除 android:onClick="startalexbutton"。 (您也可以删除android:onClick="startMainActivity"。)

PS:以后请把你的LogCat日志以文本格式;那么它们 A) 出现在搜索结果中并且 B) 更容易阅读。

【讨论】:

    【解决方案2】:

    这是因为您在 xml 中为每个按钮注册了以下几行的按钮点击次数。

     <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="26dp"
            android:layout_toRightOf="@+id/textView1"
            android:text="@string/button1"
            android:onClick="startalexbutton" />
    
     <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="26dp"
            android:layout_marginRight="20dp"
            android:layout_toRightOf="@+id/textView1"
            android:text="@string/button2"
            android:onClick="startMainActivity" />
    

    但是您还没有使用此名称定义任何 onClick() 方法。要么从 xml 中删除这些 onclick 行,要么用相同的名称定义这些方法来监听按钮,而不是再次设置 onClickListeners()。如果您决定使用您在 xml 中注册的名称定义 onClick 方法,请执行以下操作。

    public void startalexbutton(View view)
    {
    // Do what ever you need here when button is clicked. Because the control comes to this method when the button is clicked. 
    }
    

    如果你这样做了,你就不再需要 initialize() 方法了。

    【讨论】:

      【解决方案3】:

      您没有在onCreateActivityAlexMainActivity Activity 中调用initialize() 来初始化Button

       @Override
            protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
                initialize() ;//<<<<initialize here
          }
      

      并从xml中的两个按钮中删除onClick属性

      在activity_main.xml中:

       <Button
              android:id="@+id/button1"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentBottom="true"
              android:layout_marginBottom="26dp"
              android:layout_toRightOf="@+id/textView1"
              android:text="@string/button1"
             />
      

      在activityalex.xml中:

       <Button
              android:id="@+id/button2"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentBottom="true"
              android:layout_marginBottom="26dp"
              android:layout_marginRight="20dp"
              android:layout_toRightOf="@+id/textView1"
              android:text="@string/button2"
               />
      

      注意:

      当您在 java 代码中为任何 View 添加 setOnClickListener 时,不需要在 View xml 中添加 android:onClick

      【讨论】:

        猜你喜欢
        • 2016-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        相关资源
        最近更新 更多