如题,我在ListView上放了SeekBar,可是SeekBar的进度不能拖,只能用点的。希望 高手 解答 谢谢如图,前后的Button都可以点击

解决方案 »

  1.   

    我自定的Adapter继承自BaseAdapter
      

  2.   

    seekbar 肯定是能拖动的,楼主拖动不了 肯定有问题,贴代码吧
      

  3.   

    代码好乱,上些原因我在adapter里面监听的,listview的itemClick事件没有监听private void updateData(final int position, ViewHolder holder,
    HashMap<String, Object> item) {
    //是否是正在播放的item
    boolean isCurrent = false;

    if (item.get(RECORD_INFO_IS_PLAYING) != null
    && (Boolean) item.get(RECORD_INFO_IS_PLAYING)) {
    isCurrent = true;
    holder.layout.setVisibility(View.VISIBLE);
    String s = Utils.formatDuration((Integer) item.get(RECORD_INFO_DURATION));
    holder.tvTotalTime.setText(s);

    if (playState == STATE_PLAY) {
    holder.ibPlay.setImageResource(R.drawable.sr_list_pause_button);
    } else if (playState == STATE_PAUSE) {
    holder.ibPlay.setImageResource(R.drawable.sr_list_play_button);
    } holder.sb.setMax((Integer) item.get(RECORD_INFO_DURATION));
    if (item.get(RECORD_INFO_PROGRESS) != null) {
    holder.tvCurrentPlayTime.setText(Utils.formatDuration((Integer) item.get(RECORD_INFO_PROGRESS)));
    holder.sb.setProgress((Integer) item.get(RECORD_INFO_PROGRESS));
    } else {
    holder.tvCurrentPlayTime.setText(Utils.formatDuration(0));
    }
    } else {
    isCurrent = false;
    holder.layout.setVisibility(View.INVISIBLE);
    holder.ibPlay.setImageResource(R.drawable.sr_list_play_button);
    } //将position放到要监听的button和layout的tag里,在onClick里取出,即可得到当前点击的view
    holder.ibDelete.setTag(isCurrent);
    holder.listItem.setTag(isCurrent); holder.tvName.setText((item.get(RECORD_INFO_NAME) + "").replace('-', ':'));
    holder.tvLastModifyTime.setText(item.get(RECORD_INFO_LAST_MODIFIED_TIME) + "");
    holder.ibDelete.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
    if (playState == STATE_PLAY) {
    sendMessage(MSG_TOAST_WAIT_PLAY_OVER);
    return;
    } else if (playState == STATE_PAUSE) {
    if (((Boolean) v.getTag())) {
    // 发送消息,删除当前暂停的item
    sendMessage(MSG_DELETE_PAUSE);
    playState = STATE_IDLE;
    return;
    }
    } // 先删除文件
    FileHelper.deleteFile(data.get(
    position).get(
    RECORD_INFO_PATH) + "");
    // 将要删除的item从data中删除
    data.remove(position);
    // 更新显示
    SoundListAdapter.this.notifyDataSetChanged();
    sendMessage(MSG_TOAST_DELETE_SUCCESS);
    }
    }); holder.layout.setOnClickListener(new View.OnClickListener() { @Override
    public void onClick(View v) {
    }
    }); holder.sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    } @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
    } @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
    boolean fromUser) {
    if (fromUser)
    // 只处理来自用户拖动的进度改变
    sendMessage(MSG_PLAY_SEEKTO, progress);

    }
    }); // 同上面的ibplay的监听 ,改动小, 监听点击item时播放暂停等操作
    holder.listItem.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
    currentPlay = position;

    switch (playState) {
    case STATE_IDLE:
    playState = STATE_PLAY;
    sendMessage(MSG_PLAY_START, position);
    break;
    case STATE_PLAY:
    if (!((Boolean) v.getTag())) {
    sendMessage(MSG_PLAY_START, position);
    break;
    } else {
    playState = STATE_PAUSE;
    sendMessage(MSG_PLAY_PAUSE);
    } break;
    case STATE_PAUSE:
    playState = STATE_PLAY;
    if (!((Boolean) v.getTag())) {
    sendMessage(MSG_PLAY_START, position); } else {
    sendMessage(MSG_PLAY_RESTART);
    } break;
    }
    }
    }); //监听长按事件,弹出重命名对话框
    holder.listItem.setOnLongClickListener(new OnLongClickListener() { @Override
    public boolean onLongClick(View v) {
    if (playState == STATE_PLAY || playState == STATE_PAUSE) {
    sendMessage(MSG_TOAST_WAIT_PLAY_COMPLETE);
    return true;
    } AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle(R.string.rename);
    View view = LayoutInflater.from(context).inflate(R.layout.rename_dialog_layout, null);
    final EditText editText = (EditText) view.findViewById(R.id.edt_new_name);
    FileNameTextWatcher watcher = new FileNameTextWatcher();

    builder.setView(view);
    builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
    String newName = editText.getText().toString();
    if (newName.equals("") || newName == null) {
    dialog.dismiss();
    return;
    } String newPath = path.substring(0, path
    .lastIndexOf('/') + 1)
    + newName
    + path.substring(path.lastIndexOf('.'),
    path.length());
    FileHelper.rename(path, newPath);
    //
    sendMessage(MSG_UPDATE_DIS);
    dialog.dismiss();
    }
    });
    builder.setNegativeButton(R.string.cancel, null);
    AlertDialog dialog = builder.create();
    dialog.show();
    watcher.setButton(dialog.getButton(AlertDialog.BUTTON_POSITIVE));
    editText.addTextChangedListener(watcher);
    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);

    path = data.get(position).get(
    RECORD_INFO_PATH) + "";
    return true;
    }
    });
    }
      

  4.   

     holder.sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {            @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
                }            @Override
                public void onStartTrackingTouch(SeekBar seekBar) {
                }            @Override
                public void onProgressChanged(SeekBar seekBar, int progress,
                        boolean fromUser) {
                    if (fromUser)
                        // 只处理来自用户拖动的进度改变
                        sendMessage(MSG_PLAY_SEEKTO, progress);
                    
                }
            });这里是 seekbar的监听吧!! 日志打印能响应吗?? 
      

  5.   

    怎么怀疑你的这个seekbar的事件是不是被其他的空间给半路截取了啊!!拖动的事件根本没被seekbar接收!被其他空间截取了
      

  6.   

      public void onProgressChanged(SeekBar seekBar, int progress,
                        boolean fromUser) {
                    if (fromUser)
                        // 只处理来自用户拖动的进度改变
                        sendMessage(MSG_PLAY_SEEKTO, progress);
                    
                }
     这个方法 能调用??? 
      

  7.   

    原来我改写了onTouch事件,返回false,现在没事了,谢谢
      

  8.   

    楼猪,我在Activity中通过getTag(),得到的adapter中的holder,怎么监听不到seekbar的拖动事件啊~
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
    ViewHolder vHollder = (ViewHolder) arg0.getTag();
    mSeekBar = vHollder.seek;
    mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onStopTrackingTouch(SeekBar arg0) {
    Log.i("TAG", "onStopTrackingTouch");
    } public void onStartTrackingTouch(SeekBar arg0) {
    Log.i("TAG", "onStartTrackingTouch");
    } public void onProgressChanged(SeekBar arg0, int arg1,
    boolean arg2) {
    Log.i("TAG", "onProgressChanged");
    }
    });
    }
    });