0

リストビューにシークバーがありますが、リストのスクロール中にユーザーが値を変更できないようにすることはできません。リストアイテムが長押しされた場合に有効にし、ユーザーが変更できるようにしてから、再度無効にします。

助言がありますか。

ArrayAdapter内でデータベースの値を表示するように設定されているため、アクティビティからシークバーにアクセスできないようです。

シークバーが現在無効になっているため、リストアイテムに対してクリックイベントとロングクリックイベントの両方を発生させることができます。

4

2 に答える 2

7

解決

ArrayAdapterで、enabledとfocusableの両方をfalseに設定し、SeekBarリスナーを追加しました。属性をfalseに設定すると、ItemClickedリスナーのリストアイテムを使用できるようになりました。onItemCLickListener内で、シークバーを取得し、属性をtrueに設定しました。これは、上下にスライドできることを意味します。調整が終わったら無効にしました。以下のコード

ArrayAdapterスニペット

このコードは、シークバーが格納されているリストアイテムの作成内にあります

    seekBar.setClickable(false);
    seekBar.setFocusable(false);
    seekBar.setEnabled(false);

    /* attach listener */
    attachProgressUpdatedListener(seekBar, positionOfItemInList);

AttachProgressUpdatedListener

このメソッドは、arrayAdapterクラス内のシークバーにリスナーを接続します

private void attachProgressUpdatedListener(SeekBar seekBar,
    final int position) {

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

    public void onStopTrackingTouch(SeekBar seekBar) {
    int progress = seekBar.getProgress();
    int task_id = (Integer) seekBar.getTag();

    TaskHandler taskHandler = new TaskHandler(DBAdapter
        .getDBAdapterInstance(getContext()));

    taskHandler.updateTaskProgress(task_id, progress);

    mList.get(position).setProgress(progress);

    //need to fire an update to the activity
    notifyDataSetChanged();
    seekBar.setEnabled(false);

    }

    public void onStartTrackingTouch(SeekBar seekBar) {
    // empty as onStartTrackingTouch listener not being used in
    // current implementation

    }

    public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromUser) {
    // empty as onProgressChanged listener not being used in
    // current implementation

    }
});

}

OnItemCLickListener

これは、リストビューを格納するアクティビティからの抜粋です。

taskListView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
    SeekBar sb = (SeekBar) view.findViewById(R.id.seek);
    sb.setFocusable(true);
    sb.setEnabled(true);

    }
});
于 2012-04-27T08:15:44.307 に答える
0

アイテム内レイアウトファイルseekbarに次の属性を設定することで、この問題を克服しました。listviewそれから私はclickイベントを持っlistitemseekbar働いていました。

        android:focusable="false"
        android:focusableInTouchMode="false"

<SeekBar
        android:id="@+id/playback_icon"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:progress="0"
        android:progressDrawable="@drawable/red_scrubber_progress"
        android:thumb="@drawable/red_scrubber_control"
        android:focusable="false"
        android:focusableInTouchMode="false"/>
于 2015-08-18T13:45:50.313 に答える