ViewBinder中的ImageButton不起作用

时间:2011-12-02 05:49:52

标签: android imagebutton android-viewbinder

我创建了一个ViewBinder,用于将我的项目保存在ListView中,从SimpleCursorAdapter获取其内容,其中包含ImageButton。我成功获取了列表,但ImageButton只是不响应我的onclick事件,将数据库中的字符串带到另一个Activity。这就是我遇到的问题。

public class ChannelViewBinder implements SimpleCursorAdapter.ViewBinder {
    private ChannelDB mDB;
        public boolean setViewValue(View view, final Cursor cursor, int columnIndex) {
            final Context mContext = null;
                if(view instanceof ImageView) {
                        ImageView iv = (ImageView) view;
                        byte[] img = cursor.getBlob(columnIndex);
                        iv.setImageBitmap(BitmapFactory.decodeByteArray(img, 0, img.length));
                        return true;
                }

              if(view instanceof ImageButton) {
                           ImageButton ib = (ImageButton) view;
                        ib.setOnClickListener(new  View.OnClickListener() {     
                            @Override
                            public void onClick(View v) {

                                String dblink = cursor.getString(cursor.getColumnIndex(mDB.KEY_DBLINK));
                                Intent intent = new Intent();
                                intent.setClass(mContext, Doubanframe.class);
                                Bundle bunde = new Bundle();
                                bunde.putString("dblink",dblink);
                                intent.putExtras(bunde);
                                }
                            });

                }
                return false;
        }
}

以下是我的MainActivity课程:

private Button likebutton;
    private ImageButton about;
    private ChannelDB mDB;
    private ListView channellist;
    private Cursor c;


    @Override    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        likebutton=(Button) findViewById(R.id.share);
        about =(ImageButton)findViewById(R.id.about);
        channellist = (ListView) findViewById(R.id.Channel);

        mDB = new ChannelDB(this);

        String[] columns = {mDB.KEY_ID, mDB.KEY_POSTER, mDB.KEY_CHANNEL, mDB.KEY_PATH, mDB.KEY_DBLINK};
        String   table   = mDB.channelS_TABLE;

        c = mDB.getHandle().query(table, columns, null, null, null, null, null);

        startManagingCursor(c);

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                R.layout.channelview,
                c,
                new String[] {mDB.KEY_POSTER, mDB.KEY_CHANNEL, mDB.KEY_DBLINK},
                new int[] {R.id.poster, R.id.channel, R.id.douban});

        adapter.setViewBinder(new ChannelViewBinder());

        channellist.setAdapter(adapter);

        channellist.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                c.moveToPosition(position);
                Intent intent = new Intent();
                intent.setClass(HDtvs.this,Showlist.class);
                intent .putExtra("path",mDB.KEY_PATH);
                intent .putExtra("cname",mDB.KEY_CHANNEL);
                intent .putExtra("dblink",mDB.KEY_DBLINK);
                startActivity(intent);
            }
        }); 
}

1 个答案:

答案 0 :(得分:2)

ImageButton上的onClickListener中,您正在创建一个新的Intent,但您似乎无法拨打 startActivity ?您需要引用某种上下文才能够这样做。您的mContext变量似乎是一个很好的候选者,虽然我没有看到它被设置为代码段中的null以外的任何内容。

您可以通过为ChannelViewBinder类创建构造函数,轻松添加对有效上下文的引用。

public class ChannelViewBinder implements SimpleCursorAdapter.ViewBinder {
    private Context mContext = null;

    public ChannelViewBinder(Context context) {
        mContext = context;
    }
...
}

稍后您可以使用它在ImageButton的onClick中调用mContext.startActivity(intent)。显然,您还需要更改实例化对象:adapter.setViewBinder(new ChannelViewBinder(this)),其中this将引用您的MainActivity类。