Как общаться между адаптером и активностью - PullRequest
2 голосов
/ 06 августа 2011

Я не уверен, каков наилучший способ связи между адаптером и соответствующим действием.

У моего действия есть макет с WebView и галереей поверх него:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:orientation="vertical" >

    <Gallery 
        android:id="@+id/gallery"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:spacing="2dip" />       

    <WebView
        android:id="@+id/webview"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:layout_width="fill_parent" />
</LinearLayout>

Упражнение загружает данные изображения в Галерею:

public class MyActivity extends Activity {

  private MyAdapter            adapter;
  private Container            container;
  private ArrayList<Container> containers = new ArrayList<Container>();
  private Gallery              gallery;
  private WebView              webView;

  @Override
  public void onCreate(Bundle bundle) {
    ...
    gallery = (Gallery) findViewById(R.id.gallery);
    webView = (WebView) findViewById(R.id.webview);

    containers = fetchContainers();
    doGallery();
  }

  private void doGallery() {
    adapter = new MyAdapter(this,
                            containers);
    gallery.setAdapter(adapter);
  }

  private ArrayList<Container> fetchContainers() {
    ArrayList<Container> containers = null;
    ...
    return containers;
  }
}

Клик по одному из этих изображений должен изменить содержание веб-просмотра.Вот адаптер с OnClickListener:

public class MyAdapter extends BaseAdapter {

  private class MyOnClickListener implements OnClickListener {

    private Container container; 
    private Context   context; 

    public MyOnClickListener(Context context, Container container) {
      this.container = container;
      this.context = context;
    }

    public void onClick(View view) {
      //TODO: change contents of WebView
    }
  }

  private ArrayList<Container> containers;
  private Context              context;

  public View getView(final int position, final View contentView, final ViewGroup viewGroup) {
    ImageView imageView = new ImageView(context);
    Container container = containers.get(position);
    // get image data from image cache
    imageView.setOnClickListener(new MyOnClickListener(context, container));
    return imageView;
  }

  public MyAdapter(Context context, ArrayList<Container> containers) {
    this.containers = containers;
    this.context = context;
  }
}

Теперь мой вопрос.Как уведомить мероприятие о том, на каком изображении был выполнен щелчок, и перенести один объект в занятие?

Я думаю об использовании BroadcastReceiver, но я не думаю, что это предпочтительный способ сделать это.Что мне делать?

Заранее большое спасибо.

Ответы [ 2 ]

5 голосов
/ 06 августа 2011

Вместо создания прослушивателя кликов Imageview используйте галерею setOnItemClickListener

 yourGallery.setOnItemClickListener(new OnItemClickListener() 
 {
     @Override
     public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) {

         system.out.println("position"+position);               

     }
 });
0 голосов
/ 06 августа 2011

Используйте метод setOnItemClickListener вашего объекта Галерея в упражнении.

...