2011-07-08 12 views
0

我有一個名爲MoviesActivity的活動,它使用名爲MovieAdapter的ListAdapter來顯示電影列表。每個列表項具有名稱等,並且用戶可以點擊按鈕來播放電影。我的問題是 - 如何將與按鈕相關聯的onClick代碼從MovieAdapter類切換到MoviesActivity類?如何捕獲原始活動中的按鈕點擊而不是ListAdapter

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

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子類中。

回答

1

不是傳遞一個Context對象插入到MovieAdapter構造,通過在MovieActivity對象和運行MovieActivity「從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,你可以簡單地做:

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

相關問題