我有一个自定义警告对话框,其中包含搜索栏和文本视图。当用户与搜索栏的拇指交互时,我想以百分比显示该文本视图中的搜索栏的进度..
这是我的代码..
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);
但问题仍然存在..
感谢任何帮助..
答案 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 + "%");