2015-11-07 37 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用于重新使用旧视图并提高性能。

希望它有帮助。