Android打开新视图

时间:2015-11-07 20:18:24

标签: java android

我有一个持有JSON

的对象

在我的adapter class中,我使用TMDB的电影海报图片流创建了一个视图。

我有一堆更多信息,我希望用户在点击海报后能够访问并进入下一个视图。

我的问题是我无法理解将onlick监听器放在什么上。

我尝试向页面中的不同对象添加一个toast,我在xml文件中添加了一个tog到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>

1 个答案:

答案 0 :(得分:0)

如果您使用ListView显示电影列表,请将适配器绑定到ListView并呼叫setItemOnClickListener上的ListView。以下类似的东西:

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()方法中,尝试从

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

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

因此convertView用于重用旧视图并提高性能。

希望它有所帮助。