0

我在列表视图中有一个搜索栏,它被禁用以阻止用户在滚动列表时更改值。如果长时间单击列表项,我希望启用它,允许用户更改它然后再次禁用它。

有什么建议么。

我似乎无法从活动中访问搜索栏,因为它是在 ArrayAdapter 中设置的以显示数据库中的值

我可以触发列表项的单击事件和长单击事件,因为搜索栏当前被禁用。

4

2 回答 2

7

解决方案

在 ArrayAdapter 中,我将 enabled 和 focusable 都设置为 false 并添加了 SeekBar 侦听器,将属性设置为 false 允许我使用列表项 onItemClicked 侦听器。在 onItemCLickListener 中,我检索了搜索栏,将属性设置为 true,这意味着它可以向上或向下滑动。然后我在调整后禁用它。下面的代码

ArrayAdapter 片段

此代码在列表项的创建中,其中包含搜索栏

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

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

AttachProgressUpdatedListener

此方法将侦听器附加到数组适配器类中的搜索栏

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 回答