3

我有一个自定义警报对话框,其中包含一个搜索栏和一个文本视图。当用户与搜索栏的拇指交互时,我想在该文本视图中以百分比显示搜索栏的进度。

这是我的代码..

AlertDialog.Builder builder = new AlertDialog.Builder(PrefsActivity.this);
LayoutInflater inflater = getLayoutInflater();
View layoutFromInflater = inflater.inflate(R.layout.dialog_fragment_sensitivity_layout, null);      
builder.setView(layoutFromInflater)
    .setPositiveButton("Ok", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    }).setNegativeButton("Cancel", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });


    final AlertDialog dialog = builder.create();
    dialog.show();

    TextView progress_tv = (TextView) dialog.findViewById(R.id.seekbar_progress_tv2);           
    progress_tv.setText("sdf"); 
    SeekBar seekBar = (SeekBar) dialog.findViewById(R.id.seekBar1); 
    seekBar.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) {                             
            System.out.println("progress... " + progress);      
            progress_tv.setText(progress);  // Exception...
        }
    });

不幸的是,每当我尝试拖动拇指时,应用程序都会崩溃,给我一个

onSeekBarChangeListener 中的 ResourceNotFound 异常,我将 seekbar 的进度设置为该文本视图。

两个我都试过了。。

TextView progress_tv = (TextView) dialog
                .findViewById(R.id.seekbar_progress_tv2);

TextView progress_tv = (TextView) layoutFromInflater
                    .findViewById(R.id.seekbar_progress_tv2);

但问题仍然存在..

任何帮助表示赞赏..

4

4 回答 4

4

TextView期望得到charSequence并且你将一个 int 传递给它。解决这个问题的一种方法是Integer.toString(progress)

于 2012-12-24T15:09:18.953 回答
0

而不是将 null 作为父级添加您的根布局作为父级,同时膨胀对话框布局,如下所示。

View layoutFromInflater = inflater
                           .inflate(R.layout.dialog_fragment_sensitivity_layout,
                           (ViewGroup) findViewById(R.id.yourLayoutRoot)); 

并仅通过查找视图layoutFromInflater

希望这对你来说应该很好。

于 2012-12-24T13:03:21.920 回答
0
Dialog yourDialog = new Dialog(this);
LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.your_dialog,(ViewGroup)findViewById(R.id.your_dialog_root_element));
yourDialog.setContentView(layout);

因此,您可以对元素进行如下操作:

TextView yourDialogTextView = (TextView)layout.findViewById(R.id.your_dialog_tv);
SeekBar yourDialogSeekBar = (SeekBar)layout.findViewById(R.id.your_dialog_seekbar);
// ...

等等,为 seekbar 设置侦听器。

编辑:seekbar onchangelistener 应如下所示:

OnSeekBarChangeListener yourSeekBarListener = new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
        //add code here
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
        //add code here
}

@Override
public void onProgressChanged(SeekBar seekBark, int progress, boolean fromUser) {
        //add code here
yourDialogTextView.setText(progress);
    }
 };
 yourDialogSeekBar.setOnSeekBarChangeListener(yourSeekBarListener);
于 2012-12-24T13:11:31.470 回答
0

我知道这是一个很老的问题,但实际上很容易。只需输入这个

progress_tv.setText("" + progress + "%");
于 2014-05-25T14:38:45.593 回答