onActivityResult в не вызывается в классе, расширенном от ArrayAdapter

1

Я действительно искал, но не могу найти полезный ответ в Интернете. Вот почему я поднимаю запрос. Я хотел бы загрузить камеры и захвата изображения в getView метод пользовательского класса ArrayAdapter. Камера загружается и захватывает изображение, но onActivityResult() никогда не вызывается. Мой код показан ниже.

       public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        ViewHolder viewHolder=new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) this.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if(vi==null){
            vi = inflater.inflate(R.layout.list_row, parent, false);
            viewHolder.id=(TextView)vi.findViewById(R.id.title);
            viewHolder.thumbnailImage=(ImageView)vi.findViewById(R.id.list_image);
            viewHolder.arrow=(ImageView)vi.findViewById(R.id.list_arrow);
            vi.setTag(viewHolder);
        }
        else
            viewHolder=(ViewHolder) vi.getTag();



        // Setting all values in listview
        viewHolder.id.setText(listIDs.get(position));
        viewHolder.thumbnailImage.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                ((Activity)context).startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }

        });
        return vi;
    }

   protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
//            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
//            imageView.setImageBitmap(photo);
        }  

    } 

Затем пользовательский класс адаптера активируется из класса ListFragment как

customList_Adaptor adapter = new customList_Adaptor(
                getActivity(), R.layout.list_row, listIDs);

Как я могу изменить так, чтобы вызывается метод onActivityResult(). благодаря

Теги:

3 ответа

0
Лучший ответ

onActivityResult относится к Activity. Вы можете переопределить только в контексте Actvity/ListActivity. Что вы можете сделать, так это сохранить ссылку на ваш подкласс ArrayAdapter внутри Actvity/ListActivity, создать метод внутри него, чтобы вызвать, когда onActivityResult запущен, и условие выполнено

  • 0
    Я новичок в Android, не ясно, что вы имеете в виду. Любой пример программы?
  • 0
    Он хочет сказать следующее: если этот класс, показанный выше, является дополнительным классом вне вашей деятельности, вы должны интегрировать его в свою деятельность, где вы хотите захватить изображение. Вот простой пример: devtut.wordpress.com/2011/06/09/…
2

Сначала создайте object CustomArrayAdapter class в классе, который должен extends с Activity или ListActivity потому что onActivityForResult является overrided методом класса Activity. В вашем случае вы можете выполнить следующие действия:

1) Сделать класс

import android.graphics.Bitmap;

public class Items { // You can give any name to this class

    private Bitmap bitmap;

    public Bitmap getBitmap() {
        return bitmap;
    }

    public void setBitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }

}

2) В вашем классе (который распространяется с Activity или ListActivity) вы должны создать объект своего класса CustomArrayAdapter, например:

public class YourClassName extends Activity {\

         public static final int CAMERA_REQUEST = 1; // here integer value 1 must be same                
                                                     // as you gave in CustomAdapterClass

        //First make an array list of the class created above
     ArrayList<Items> camera_pic_array = new ArrayList<Items>();

       // make object of CustomArrayAdapter Class
     CustomArrayAdapter adapter = new  CustomArrayAdapter(this, camera_pic_array);


      /* It is assumed by me that you should have a constructor of your CustomArrayAdapter 
       with two parameters like 
       public CustomArrayAdapter(Context ctx, ArrayList<Items> list){
               this.context = context;
        this.list = list;
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      }
        */

       // now here, write onActivityResult code 


     @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case CAMERA_REQUEST: {
            if (resultCode == RESULT_OK) {
                Bitmap bitmap = (Bitmap) data.getExtras().get("data");              
                Items item = new Items();
                item.setBitmap(bitmap);
                camera_pic_array.add(item);
                adapter.notifyDataSetChanged(); //you must notify this 
                                                                // line is very important

            }

            break;
        }
           }
        }

Надеюсь, это сработает для вас, я сделал то же самое и отлично поработал для меня....

  • 0
    @batuman надеюсь, это поможет вам
0

OnActivityResult будет вызван вашей деятельностью. Не на вашем адаптере массива.

  • 0
    Так как я могу продолжить? Мне нравится реализовывать в классе ArrayAdapter.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню