在通用 Utils 文件中使用 Android 菜单代码

Using Android menu code in common Utils File

我正在尝试在 Utils.java 文件中实现我的菜单。好吧,到目前为止一切顺利,菜单正常显示,但当我单击任何菜单项时,应用程序停止工作。我似乎没有找到问题所在,非常感谢您的建议。我的菜单、实用程序和 activity 文件的代码如下:

Utils.java

package com.package.name;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;

public class Utils extends Activity{

private Context _context;

public Utils(Context context){
    this._context = context;
}

public void menuSwitch(int item) {
       switch (item) {
            case R.id.menu_one:
                startActivity(new Intent(getApplicationContext(),
                        MainActivity.class));
            case R.id.menu_two:
                startActivity(new Intent(getApplicationContext(),
                        MessageActivity.class));
            case R.id.menu_three:
                startActivity(new Intent(getApplicationContext(),
                        LocateActivity.class));
            case R.id.menu_four:
                startActivity(new Intent(this,
                        AboutActivity.class));
    }
}
}

menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item android:id="@+id/menu_one" android:title="@string/menu_one" />
<item android:id="@+id/menu_two" android:title="@string/menu_two" />
<item android:id="@+id/menu_three" android:title="@string/menu_three" />
<item android:id="@+id/menu_four" android:title="@string/menu_four" />
</menu>

menuActivity.java

package com.package.name;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class DatabaseActivity extends ListActivity {

Utils util;

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

    util = new Utils(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_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    util.menuSwitch(item.getItemId());
    return true;
}
}

你正在使用 startactivity 的 Util class ,但它应该是 class 的菜单在那里,因此你应该使用

_context.startactivity(new Intent(_context,wahteverclass.class))

您不应延长 Utils class。用这个替换您的代码。

public class Utils{

private Context _context;

public Utils(Context context){
    this._context = context;
}

public void menuSwitch(int item) {
       switch (item) {
            case R.id.menu_one:
                _context.startActivity(new Intent(_context.getApplicationContext(),
                        MainActivity.class));
            case R.id.menu_two:
                _context.startActivity(new Intent(_context.getApplicationContext(),
                        MessageActivity.class));
            case R.id.menu_three:
                _context.startActivity(new Intent(_context.getApplicationContext(),
                        LocateActivity.class));
            case R.id.menu_four:
                _context.startActivity(new Intent(_context.getApplicationContext(),
                        AboutActivity.class));
    }
}
}