1

良い一日、

私はAndroidを初めて使用し、Eclipse3.7.2を使用しています。私はネット上の例をたどっています(いわゆる「2つの数字を追加する」例ですが、AbsoluteLayoutが非推奨になっていることを発見した後、RelativeLayoutを使用し、基本的にゼロから始めています。アプリは基本的に2つの数字を取ることになっています(どのくらいの距離)男が行って、彼が1マイルあたりいくら支払われるか)そして総支払額をポップアウトします。

アプリは正常にコンパイルされ、エミュレーターで起動します。ワクワクします!2つの数字を入力して、ボタンを押します。何もない。エラーが発生していないことを確認します。

ボタンリスナーに何か足りないものがありますか?これが私が入れたJavaコードです(2012年10月31日午後5時27分更新):

package com.example.wing_it;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
EditText mile,driver;
Button button1;
TextView tv;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mile= (EditText) findViewById(R.id.mile);
    button1 = (Button) findViewById(R.id.button1);
    tv = (TextView) findViewById(R.id.pay);
    driver= (EditText) findViewById(R.id.driver);
    button1.setOnClickListener((OnClickListener) this);
    }


public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
class clicker implements Button.OnClickListener
{
public void onClick(View v) {
    // TODO Auto-generated method stub
    {
        String a,b;
        Integer vis;
        a = mile.getText().toString();
        b = driver.getText().toString();
        vis = Integer.parseInt(a)*Integer.parseInt(b);
        tv.setText(vis.toString());
        }
    }
}       
}

XMLコードは次のとおりです。

<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" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="@string/miles"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="40dp"
    android:text="@string/paypermile"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView2"
    android:layout_marginLeft="52dp"
    android:layout_marginTop="62dp"
    android:layout_toRightOf="@+id/textView2"
    android:text="@string/compute" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/button1"
    android:layout_marginTop="46dp"
    android:text="@string/pay"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/mile"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/button1"
    android:ems="10"
    android:inputType="numberDecimal" >

    <requestFocus />
</EditText>

<EditText
    android:id="@+id/driver"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/textView2"
    android:layout_alignBottom="@+id/textView2"
    android:layout_alignLeft="@+id/mile"
    android:layout_alignParentRight="true"
    android:ems="10"
    android:inputType="numberDecimal" />

<TextView
    android:id="@+id/pay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/textView3"
    android:layout_alignBottom="@+id/textView3"
    android:layout_alignParentRight="true"
    android:text="@string/totalpay"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

マニフェストは次のとおりです。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.wing_it"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="15" />

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

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

</manifest>

strings.xmlで結果のtextviewの値を何も設定していません(空白のみ)。これは「0」に設定されていて、違いが生じるかどうかを確認するために削除しました。それでも、何もありません。

ここで見落としているものはありますか?ご覧いただきありがとうございます。:)

4

4 に答える 4

1
    public class MainActivity extends Activity implements OnClickListener {

    public void onCreate() {
     button1 = (Button) findViewById(R.id.button1);
     button1.setOnClickListener(this);
    }

    public void onClick(View view) {
       // code here
    }

コードを読むのは難しいですが、これはうまくいくはずです(スペルミスがある場合は申し訳ありませんが、(別のマシンで)コードから切り取って貼り付けることはできません)

于 2012-10-30T20:16:58.400 に答える
1

OK, I am a newbie for sure and had to resort to installing IntelliJ 11, which seemed to be a lot more thoughtful in terms of hints and clarity...and then went back over to Eclipse to make sure the problem wasn't Eclipse (because I had updated the version I have and you would have thought the world had changed in a day lol!)

Anyway, I only had to change a couple of lines of code after I went back over it. Turns out I didn't need a class for the clicker at all. I just needed to incorporate the "new button.OnClickListener" as the argument for setting the OnClickListener. I'm truly living and learning and it's good day when you learn. Thank you, Simon and David M. Have a good day!

Here is the code which now works for anyone to reference:

package com.example.wing_it;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
EditText mile,driver;
Button button1;
TextView tv;
private double x,y,z;
private Button calculate;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mile= (EditText) findViewById(R.id.mile);
    button1 = (Button) findViewById(R.id.button1);
    tv = (TextView) findViewById(R.id.pay);
    driver= (EditText) findViewById(R.id.driver);
    calculate=(Button)findViewById(R.id.button1);
    calculate.setOnClickListener(new Button.OnClickListener()
    {public void onClick
                (View  v) { calculate();}});
}
private void calculate()
{
    x=Double.parseDouble(mile.getText().toString());
    y=Double.parseDouble(driver.getText().toString());
    z=x*y;
    tv.setText(Double.toString(z));

    }


public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
}
于 2012-11-01T13:24:48.463 に答える
0

何らかの理由でインターフェースに2つのメソッドがあります...ボタンがクリックされると、ではなく、という名前のメソッドが呼び出されonClickonClick1ます。

class clicker implements Button.OnClickListener
{
public void onClick1(View v)
{
    String a,b;
    Integer vis;
    a = mile.getText().toString();
    b = driver.getText().toString();
    vis = Integer.parseInt(a)*Integer.parseInt(b);
    tv.setText(vis.toString());
}

public void onClick(View v) {
    // TODO Auto-generated method stub

}

する必要があります:

class clicker implements Button.OnClickListener
{
public void onClick(View v)
{
    String a,b;
    Integer vis;
    a = mile.getText().toString();
    b = driver.getText().toString();
    vis = Integer.parseInt(a)*Integer.parseInt(b);
    tv.setText(vis.toString());
}

メソッド名がからonClick1に変更されていることに注意してくださいonClick

ただし、OnClickListenerを実装するためにネストされたクラスを使用する必要はありません。代わりに、として知られているものを使用して、「オンザフライ」でOnClickListenerを作成できますinner classes

これは次のように行われます。

button1.setOnClickListener(new Button.OnClickListener() {
    public void onClick(View v)
    {
        String a,b;
        Integer vis;
        a = mile.getText().toString();
        b = driver.getText().toString();
        vis = Integer.parseInt(a)*Integer.parseInt(b);
        tv.setText(vis.toString());
    }
});
于 2012-10-30T20:14:30.783 に答える
0

AndroidStudio自体にバグがある場合があります。それを閉じて再起動し、アプリを再度実行します。動作するはずです。

于 2017-11-17T14:04:06.593 に答える