如何捕获按钮单击而不是原始列表适配器中的活动 [英] How to capture a button click in the original activity instead of the ListAdapter

查看:91
本文介绍了如何捕获按钮单击而不是原始列表适配器中的活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为MoviesActivity的活动,该活动使用一个名为MovieAdapter的ListAdapter来显示电影列表.每个列表项都有名称等,以及用户可以单击以播放电影的按钮.我的问题是-如何将与按钮关联的onClick代码从MovieAdapter类转移到MoviesActivity类?

I have an activity called MoviesActivity that uses a ListAdapter called MovieAdapter to display a list of movies. Each list item has name etc., and a button which the user can click to play the movie. My question is - how do I shift the onClick code associated with the button from the MovieAdapter class to the MoviesActivity class?

public class MoviesActivity extends Activity{
    private static final String TAG = "MoviesActivity";
    public ListView listView; 
    public MovieAdapter movieAdapter;
      ...

    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.movies);

      listView = (ListView) findViewById(R.id.MovieListView);
      moviesManager = new MoviesManager(client);
      List<Movie> allMoviesList = moviesManager.getAllMoviesList();      


      movieAdapter = new MovieAdapter((Context)this, allMoviesList,moviesManager);
      listView.setAdapter(movieAdapter);

}

MovieAdapter的代码

The code for MovieAdapter

 public class MovieAdapter extends BaseAdapter implements OnClickListener{
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          ...
      }
      @Override
      public void onClick(View v) { 
         //Play movie
          ...
      }
 }

我的MovieAdapter正常运行.我的问题是-我想编写代码以在MoviesActivity中而非MovieAdaptor中播放电影.我怎样才能做到这一点?我曾多次遇到类似的问题,但从未找到一种好的技术(使用静态方法等除外).问题是当我尝试在onClick内发出getWindow()时出现的,因为它不在Activity子类中,所以不会出现.

My MovieAdapter is fully functioning. My question is - I would like to write the code to play the movie in MoviesActivity and not in MovieAdaptor. How can I do that? I have had similar problems many times but never found a good technique (other than using static methods etc.) The problem comes when I try to issue a getWindow() inside onClick - which it wouldn't since its not in a Activity subclass.

推荐答案

不是将Context对象传递到MovieAdapter构造函数中,而是传递MovieActivity对象并运行MovieActivityplayMovie(Movie)按钮的OnClick事件中的方法:

Instead of passing a Context object into your MovieAdapter constructor, pass in the MovieActivity object and run the MovieActivity's playMovie(Movie) method from the button's OnClick event:

您的活动:

public class MoviesActivity extends Activity {
    public ListView listView; 
    public MovieAdapter movieAdapter;

    //...

    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.movies);

       listView = (ListView) findViewById(R.id.MovieListView);
       moviesManager = new MoviesManager(client);
       List<Movie> allMoviesList = moviesManager.getAllMoviesList();      

       movieAdapter = new MovieAdapter(this, allMoviesList, moviesManager);
       listView.setAdapter(movieAdapter);
    }

    public void playMovie(Movie movie) {
        // ...
    }
}

您的适配器:

public class MovieAdapter extends BaseAdapter {
      private MoviesActivity mActivity;
      private List<Movie> mMovies;
      private MoviesManager mClient;

      // ...

      public MovieAdapter(MoviesActivity activity, List<Movie> allMovies, 
              MoviesManager client) {
          mActivity = activity;
          mMovies = allMovies;
          mClient = client;
      }

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {

          final Movie movie = mMovies.get(position);

          // ...

          myButton.setOnClickListener(new OnClickListener() {
              @Override
              public void onClick(View v) { 
                  mActivity.playMovie(movie);
              }
          });
      }
 }

这篇关于如何捕获按钮单击而不是原始列表适配器中的活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆