我在 main_activity
中有以下方法,当我从 button
中单击时会启动该方法。我是 android 的新手,如果你能帮助我,请多多指教。我想将此方法放置到另一个名为 activity2
的 Activity 中,并从操作栏中运行一个图标。所以在我的 main_activity 的 onOptionsMenuselected
里面,我想放置 activity2.onclick();
这个主要 Activity .. 这是有效的
case R.id.add:
Toast.makeText(this, "Search for new photos", Toast.LENGTH_SHORT).show();
openGallery();
// Intent iadd= new Intent(this,AddImage.class);
// startActivity(iadd);
return true;
}
public void openGallery() {
Intent gallery = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, PICK_IMAGE);
}
如果我将 opengallery() 移动到其他主要 Activity ,我会得到错误 nullerpoint 异常
06-11 18:20:05.239: E/AndroidRuntime(1841): at com.example.sqlfirst.AddImage.openGallery(AddImage.java:34)
06-11 18:20:05.239: E/AndroidRuntime(1841): at com.example.sqlfirst.MainActivity.onOptionsItemSelected(MainActivity.java:176)
06-11 18:20:05.239: E/AndroidRuntime(1841): at android.app.Activity.onMenuItemSelected(Activity.java:2650)
06-11 18:20:05.239: E/AndroidRuntime(1841): at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:373)
这是我在 main_activity 中的新代码
case R.id.add:
// AddImage adimg = new AddImage(this);
Toast.makeText(this, "Search for new photos", Toast.LENGTH_SHORT).show();
new AddImage().openGallery();
// Intent iadd= new Intent(this,AddImage.class);
// startActivity(iadd);
return true;
}
return true;
这是我的第二个 Activity
package com.example.sqlfirst;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
public class AddImage extends ActionBarActivity {
private static final int PICK_IMAGE = 100;
public AddImage() {
// TODO Auto-generated constructor stub
}
public void openGallery() {
Intent gallery = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, PICK_IMAGE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == PICK_IMAGE) {
DBhelper db = new DBhelper(this);
// get image from drawable
Bitmap image = BitmapFactory.decodeResource(getResources(),
R.drawable.sample2);
// convert bitmap to byte
ByteArrayOutputStream stream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte imageInByte[] = stream.toByteArray();
db.addContact(new Contact("Main", imageInByte));
}
}
}
最佳答案
所以你想在两个 Activity 之间共享一个通用方法。这是好事。
但要实现这一点,该方法应该是 static
或者您必须创建一个两个 Activity 都可以扩展的父类(super class)。
首先尝试使方法静态化。如果不可能,将该方法作为 protected
放在 BaseActivity extends WhateverAndroidBaseActivityYouAreUsing
或其他任何地方并制作 Activity1 extends BaseActivity
,对于 Activity2
.
关于android - 从主 Activity 的操作栏图标运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30783430/