从mainactivity的actionbar图标运行方法

时间:2015-06-11 14:17:41

标签: android

我在main_activity中点击button时启用了以下方法。我是android的新手,所以如果你能帮帮我的话。我想将此方法放在另一个名为activity2的活动中,并从其中运行一个来自操作栏的图标。所以在main_activity中的onOptionsMenuselected内,我想放置activity2.onclick();

这个主要的活动..这是有效的

 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()移动到其他主要活动,则会出现错误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;

这是我的第二项活动

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

          }
          }



}

1 个答案:

答案 0 :(得分:2)

所以你想在两个活动中分享一个共同的方法。这是一件好事。

但要实现这一点,该方法应该是static或者您必须创建一个活动将扩展的超类。

首先尝试将方法设为静态。如果不可能,请将该方法protected放在BaseActivity extends WhateverAndroidBaseActivityYouAreUsing或其他内容中,然后生成Activity1 extends BaseActivityActivity2也一样。