2011-07-08 9 views
0

ムービーのリストを表示するには、MovieAdapterというListAdapterを使用するMoviesActivityというアクティビティがあります。各リストアイテムは名前等を有し、ユーザがクリックして映画を再生することができるボタンを有する。私の質問は - どのようにボタンに関連付けられたonClickコードをMovieAdapterクラスからMoviesActivityクラスに移すのですか? MovieAdapterListAdapterの代わりに元のアクティビティのボタンをキャプチャする方法

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ため

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

} 

コードが完全に機能しています。私の質問です - 私はMoviesAdctorではなくMoviesActivityで映画を再生するためのコードを記述したいと思います。どうやってやるの?私は同様の問題を何度も経験しましたが、(静的メソッドなどを使用する以外の)良いテクニックは見つけられませんでした。問題は、onClick内部でgetWindow()を発行しようとしたときです。

答えて

1

をs playMovie(Movie)ボタンのOnClickイベントからの方法:

あなたの活動:

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); 
       } 
      }); 
     } 
} 
+0

私はなぜ私が活動をインスタンス化することができなかったことが起こったのか分かりません!どうもありがとう! (あなたの答えを投票するために今評判がない) – Mahesh

0

あなたは、単に行うことができます代わりに、活動のListActivityを拡張することができる場合:「MovieActivityオブジェクトを渡すとMovieActivityを実行して、代わりにあなたのMovieAdapterコンストラクタにContextオブジェクトを渡すの

protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

}

+0

http://developer.android.com/reference/android/app/ListActivity.html#onListItemClick%28android.widget.ListView,%20android.view.View、 %20int、%20long%29 – IamAlexAlright

+0

ユーザーは、リスト項目内ではなくリスト項目内のボタンをクリックします。 – Mahesh

関連する問題