如何捕获按钮单击而不是原始列表适配器中的活动 [英] How to capture a button click in the original activity instead of the ListAdapter
问题描述
我有一个名为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
对象并运行MovieActivity
的playMovie(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屋!