【问题标题】:Create instance of new class in Android在 Android 中创建新类的实例
【发布时间】:2013-03-11 11:46:43
【问题描述】:

我是 Android 编程新手,但对 Java 有一点经验。但是,我正在创建一个 Android 应用程序,当用户单击一个按钮时,我希望实例化一个不同的类...... 这是我的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();
          }

这是 BudgetPeriod 类

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);
    }
}

如果用户单击该按钮,则模拟器上会显示一条错误消息“不幸的是,此应用必须关闭”

关于我做错了什么有什么想法吗? 谢谢

【问题讨论】:

  • Activity 没有在 Android 中使用构造函数进行实例化。你想达到什么目标?
  • 使用 Intent 开始新活动

标签: java android xml android-intent


【解决方案1】:

像这样开始活动。

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

并确保您在 AndroidManifest.xml 中声明了活动

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

【讨论】:

    【解决方案2】:

    首先,你不能像这样创建Activity的实例,并调用它的方法。就像简单的 Java 类。因为 Android Activity 有自己的调用方法的生命周期。

    您必须使用 Button 的 onClick() 中的 Intent 来启动 Activity BudgetPeriod

    改变你的方法,比如,

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

    并在 AndroidManifest.xml 文件中注册以下 BudgetPeriod Activity。

    【讨论】:

    • 另一件事从onCreate()onCreate() 活动中删除第二个额外的super.onCreate(savedInstanceState);
    【解决方案3】:

    android 中的 Activity 不会通过创建这样的实例来启动:

    您需要使用 Intents 来启动如下所示的活动

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

    并且您需要在 manifest.xml 文件中注册该活动,例如:

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

    您可以通过以下链接明确意图: http://www.vogella.com/articles/AndroidIntent/article.html http://developer.android.com/reference/android/content/Intent.html

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      相关资源
      最近更新 更多