如何使用 Override SimpleCursorAdapter 将 OnClickLitsener 设置为 ListView 中的 Button
我现在有一个使用 simplecursoradapter 从数据库获取数据的列表视图,我从数据库查询链接并将其分配给列表每一行中的一个按钮,我正在重写 simplecursoradapter 类来为按钮设置 onclicklistener ,但我的代码不工作,有人能告诉我出了什么问题吗?
这是我的适配器:
public class ChannelAdapter extends SimpleCursorAdapter{
private LayoutInflater mInflater;
private List<ChannelPoster> items;
private Context mContext;
private String dblink;
public ChannelAdapter(Context context, int layout, Cursor c, String[] from,
int[] to) {
super(context, layout, c, from, to);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position,View convertView,ViewGroup par)
{
ViewHolder holder;
if(convertView == null)
{
convertView = mInflater.inflate(R.layout.channelview, null);
holder = new ViewHolder();
holder.image = (ImageView) convertView.findViewById(R.id.poster);
holder.text = (TextView) convertView.findViewById(R.id.channel);
holder.button = (ImageButton) convertView.findViewById(R.id.douban);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
ChannelPoster tmpN=(ChannelPoster)items.get(position);
holder.text.setText(tmpN.getChannel());
holder.image.setImageResource(tmpN.getPoster());
holder.button.setOnClickListener(new ImageButton.OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(mContext, Doubanframe.class);
Bundle bunde = new Bundle();
bunde.putString("dblink",dblink);
intent.putExtras(bunde);
mContext.startActivity(intent);
}
});
return convertView;
}
private class ViewHolder
{
ImageView image;
TextView text;
ImageButton button;
}
}
这就是我填充列表视图的方式:
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});
channellist.setAdapter(adapter);
LogCat
12-06 15:07:01.093: INFO/System.out(1257): debugger has settled (1375)
12-06 15:07:02.172: DEBUG/dalvikvm(1257): GC freed 884 objects / 61568 bytes in 118ms
12-06 15:07:03.029: DEBUG/Splash(1257): table exist
12-06 15:07:03.359: WARN/InputManagerService(59): Got RemoteException sending setActive(false) notification to pid 1225 uid 10028
12-06 15:07:03.903: INFO/ActivityManager(59): Displayed activity com.appkon.hdtvs/.Splash: 7947 ms (total 7947 ms)
12-06 15:07:04.920: INFO/ActivityManager(59): Starting activity: Intent { cmp=com.appkon.hdtvs/.HDtvs }
12-06 15:07:06.001: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/5372374/
12-06 15:07:06.190: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/3190880/
12-06 15:07:06.450: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/3990470/
12-06 15:07:06.720: DEBUG/dalvikvm(1257): GC freed 546 objects / 27992 bytes in 107ms
12-06 15:07:06.780: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/4804079/
12-06 15:07:06.931: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/6557005/
12-06 15:07:07.111: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/4317617/
12-06 15:07:07.270: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/6436783/
12-06 15:07:07.410: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/2156528/
12-06 15:07:07.590: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/6778677/
I now have a listview using simplecursoradapter to get data from the database and I query a link from the database and assign it to a button in each row of the list and I am rewriting the simplecursoradapter class to set onclicklistener for the button, but my codes aren't working, would anyone tell me what's the problem?
This is my Adapter:
public class ChannelAdapter extends SimpleCursorAdapter{
private LayoutInflater mInflater;
private List<ChannelPoster> items;
private Context mContext;
private String dblink;
public ChannelAdapter(Context context, int layout, Cursor c, String[] from,
int[] to) {
super(context, layout, c, from, to);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position,View convertView,ViewGroup par)
{
ViewHolder holder;
if(convertView == null)
{
convertView = mInflater.inflate(R.layout.channelview, null);
holder = new ViewHolder();
holder.image = (ImageView) convertView.findViewById(R.id.poster);
holder.text = (TextView) convertView.findViewById(R.id.channel);
holder.button = (ImageButton) convertView.findViewById(R.id.douban);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
ChannelPoster tmpN=(ChannelPoster)items.get(position);
holder.text.setText(tmpN.getChannel());
holder.image.setImageResource(tmpN.getPoster());
holder.button.setOnClickListener(new ImageButton.OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(mContext, Doubanframe.class);
Bundle bunde = new Bundle();
bunde.putString("dblink",dblink);
intent.putExtras(bunde);
mContext.startActivity(intent);
}
});
return convertView;
}
private class ViewHolder
{
ImageView image;
TextView text;
ImageButton button;
}
}
and this is how I populate the listview:
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});
channellist.setAdapter(adapter);
LogCat
12-06 15:07:01.093: INFO/System.out(1257): debugger has settled (1375)
12-06 15:07:02.172: DEBUG/dalvikvm(1257): GC freed 884 objects / 61568 bytes in 118ms
12-06 15:07:03.029: DEBUG/Splash(1257): table exist
12-06 15:07:03.359: WARN/InputManagerService(59): Got RemoteException sending setActive(false) notification to pid 1225 uid 10028
12-06 15:07:03.903: INFO/ActivityManager(59): Displayed activity com.appkon.hdtvs/.Splash: 7947 ms (total 7947 ms)
12-06 15:07:04.920: INFO/ActivityManager(59): Starting activity: Intent { cmp=com.appkon.hdtvs/.HDtvs }
12-06 15:07:06.001: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/5372374/
12-06 15:07:06.190: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/3190880/
12-06 15:07:06.450: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/3990470/
12-06 15:07:06.720: DEBUG/dalvikvm(1257): GC freed 546 objects / 27992 bytes in 107ms
12-06 15:07:06.780: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/4804079/
12-06 15:07:06.931: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/6557005/
12-06 15:07:07.111: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/4317617/
12-06 15:07:07.270: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/6436783/
12-06 15:07:07.410: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/2156528/
12-06 15:07:07.590: INFO/System.out(1257): resolveUri failed on bad bitmap uri: http://movie.douban.com/subject/6778677/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它对我有用,并且确实显示了具有不同值的吐司。您可以在没有支架的情况下尝试吗?只是为了尝试。
it worked for me and did show the toast with different values. Can you try without the holder one's just for trying.