Create instance of new class in Android

2019-09-21 18:59发布

问题:

I am new to Android programming but have a little bit of experience with Java. However, I am creating an Android application and when a user clicks a button I want a different class to instantiated... This is my MainActivity.java

private void setButtonClickListener() {
    Button budgetPeriodButton = (Button)findViewById(R.id.budgetPeriodButton);
    Button incomingsButton = (Button)findViewById(R.id.incomingsButton);
    Button outgoingsButton = (Button)findViewById(R.id.outgoingsButton);
    Button resultsButton = (Button)findViewById(R.id.resultsButton);
    budgetPeriodButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            BudgetPeriod bp = new BudgetPeriod();
            bp.changeUI();
          }

And this is the BudgetPeriod class

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;

public class BudgetPeriod extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_budget);
        super.onCreate(savedInstanceState);
        changeUI();
    }

    public void changeUI() {
        ImageView imageView = (ImageView) findViewById(R.id.budget_icon);
        Drawable newBudgetImage;
        newBudgetImage = getResources().getDrawable(R.drawable.budget_period);
        imageView.setImageDrawable(newBudgetImage);
    }
}

If the user clicks on the button, then an error message on the emulator says "Unfortunatley, this app has had to close"

Any ideas on what I am doing wrong? Thanks

回答1:

Start the activity like this.

budgetPeriodButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
       Intent intent = new Intent(v.getContext(), BudgetPeriod.class);
       startActivity(intent);
    }
});

and make sure you declared the activity in AndroidManifest.xml

<activity name=".BudgetPeriod" android:name="Budget" />


回答2:

First of All, you can not create an instance of Activity like this, and calling method of it. Like simple Java Class. Because Android Activity has its own life cycles of calling methods.

You have to start Activity BudgetPeriod Using Intent in Button's onClick().

Change your method like,

budgetPeriodButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
          Intent intent = new Intent(v.getContext(), BudgetPeriod.class);
          startActivity(intent)
}

And register following BudgetPeriod Activity in AndroidManifest.xml file.



回答3:

Activity in android dosen't start by creating instance like this:

you need to use Intents to start activity like below

budgetPeriodButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          Intent intent = new Intent(v.getContext(), BudgetPeriod.class);
          startActivity(intent);

   }

and you need to register that activity in manifest.xml file like:

    <activity
        android:name=".BudgetPeriod"
    />

you can make yourself clear about intents by Following links: http://www.vogella.com/articles/AndroidIntent/article.html http://developer.android.com/reference/android/content/Intent.html