2015-11-07 60 views
0

我有一個對象捧在adapter classJSONAndroid的開放新觀點

創建與TMDB電影海報的圖像流的視圖。

我有一堆更多的信息我希望用戶能夠訪問,一旦他們點擊一張海報,並被帶到下一個視圖。

我的問題是我很難理解什麼把onlick監聽器。

我試着給頁面中的不同對象添加一個吐司,我在xml文件中添加了一個吐司給img的id。但當我點擊圖片時無法打開任何內容。

這是我的適配器類

public class adapter extends ArrayAdapter<Movie> { 

    String url = "http://image.tmdb.org/t/p/w185"; 
    private Context context; 
    private List<Movie> movieList; 
    public adapter(Context context, int resource, List<Movie> objects) { 
     super(context, resource, objects); 
     this.context = context; 
     this.movieList = objects; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     View view = inflater.inflate(R.layout.item_file,parent,false); 
     Movie movie = movieList.get(position); 
     TextView tv = (TextView) view.findViewById(R.id.name); 
     tv.setText(movie.getTitle()); 
     ImageView img = (ImageView) view.findViewById(R.id.img); 
     Picasso.with(getContext()).load(url+movie.getPoster_path()).into(img); 
     return view; 
    } 
} 

這是我的主,

List<Movie> movieList; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final RestAdapter restadapter = new RestAdapter.Builder().setEndpoint("http://api.themoviedb.org").build(); 
     api movieapi = restadapter.create(api.class); 

     movieapi.getData(new Callback<MoviesResponse>() { 
      @Override 
      public void success(MoviesResponse moviesresponse, Response response) { 
       movieList = moviesresponse.getResults(); 

       adapter adapt = new adapter(getApplicationContext(), R.layout.item_file, movieList); 
       setListAdapter(adapt); 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_LONG).show(); 
      } 

     }); 
    } 

所以從我的理解,我需要正確的元素上設置一個onClickListener, 打開一個新的意圖和綁定該班級掌握着所有的信息?

當前視圖顯示電影海報和標題。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/img" 
     android:layout_weight="2" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/name" 
     android:layout_weight="3" 
     android:textColor="#ff010101" /> 
</LinearLayout> 
+0

你可以在這裏發佈你的layout.xml文件嗎? –

+0

我假設你必須有一個ListView才能顯示所有電影列表(海報和標題)嗎? –

回答

0

如果使用ListView顯示電影列表,然後綁定適配器的ListView和調用setItemOnClickListenerListView。下面類似的東西:

ListView moviesDataListView = (ListView) findViewById(R.id.YOUR_LISTVIEW_ID); 
adapter adapt = new adapter(getApplicationContext(), R.layout.item_file, movieList); 
moviesDataListView.setAdapter(adapter); 

如果要擴展ListActivity然後覆蓋onListItemClick()監聽方法,聽取他們對在列表中的項目的點擊。

@Override 
protected void onListItemClick(ListView list, View view, int position, long id) { 
    Toast.makeText(this, "Item clicked" + position, Toast.LENGTH_LONG).show(); 

    // perform required action 
} 

此操作提供選定的ListView和被點擊列表項的位置。

更多瞭解請參閱本article


一個建議:

在你getView()方法,嘗試從

View view = inflater.inflate(R.layout.item_file,parent,false); 

改變getView()來

if(convertView != null){ 
    convertView = inflater.inflate(R.layout.item_file,parent,false); 
} 

因此convertView用於重新使用舊視圖並提高性能。

希望它有幫助。