在自定义警报对话框中的文本视图中显示搜索栏的进度

时间:2012-12-24 12:37:15

标签: android android-alertdialog

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

这是我的代码..

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。

我已经尝试了两个..

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

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

但问题仍然存在..

感谢任何帮助..

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

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

仅按layoutFromInflater查找视图。

希望这对你有用。

答案 2 :(得分: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);

答案 3 :(得分:0)

我知道这是一个非常古老的问题,但它实际上非常简单。只需输入此

即可
progress_tv.setText("" + progress + "%");