如何使用 Override SimpleCursorAdapter 将 OnClickLitsener 设置为 ListView 中的 Button

发布于 2024-12-20 04:50:18 字数 4401 浏览 1 评论 0原文

我现在有一个使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅唱ヾ落雨殇 2024-12-27 04:50:18
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null)
            view = LayoutInflater.from(DummyListViewProjectActivity.this).inflate(R.layout.list_item, parent, false);
        TextView tv = (TextView) view.findViewById(R.id.text);
        tv.setText(adapterItems.get(position));
        Button bt = (Button) view.findViewById(R.id.button);
        bt.setText(adapterItems.get(position));
        bt.setTag(adapterItems.get(position));
        bt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(DummyListViewProjectActivity.this, v.getTag().toString(), Toast.LENGTH_SHORT).show();
            }
        });
        return view;
    }

它对我有用,并且确实显示了具有不同值的吐司。您可以在没有支架的情况下尝试吗?只是为了尝试。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null)
            view = LayoutInflater.from(DummyListViewProjectActivity.this).inflate(R.layout.list_item, parent, false);
        TextView tv = (TextView) view.findViewById(R.id.text);
        tv.setText(adapterItems.get(position));
        Button bt = (Button) view.findViewById(R.id.button);
        bt.setText(adapterItems.get(position));
        bt.setTag(adapterItems.get(position));
        bt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(DummyListViewProjectActivity.this, v.getTag().toString(), Toast.LENGTH_SHORT).show();
            }
        });
        return view;
    }

it worked for me and did show the toast with different values. Can you try without the holder one's just for trying.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文