在自定义 AlertDialog 中插入 SeekBar (Android)
Insert SeekBar in custom AlertDialog (Android)
我正在尝试在自定义 AlertDialog 中使用 SeekBar,但是当我单击该按钮时它崩溃了。
自定义AlertDialog 只有一个id 为"seekProgress" 的TextView 和一个id 为"seekBar1" 的SeekBar。
如果我删除 "seekBar.setOnSeekBarChangeListener..." 它不会崩溃,但当然当我移动它时什么也不会发生。
主 activity 有一个带有 onClick="myMethod" 的按钮,我在其中创建 AlertDialog。这是此方法的代码:
public void myMethod(View view){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
builder.setView(inflater.inflate(R.layout.dialog_exchange_money_farmers, null));
SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar1);
seekProgress = (TextView) findViewById(R.id.seekProgress);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressValue;
TextView seekProgress = (TextView) findViewById(R.id.seekProgress);
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progressValue = progress;
seekProgress.setText("Covered: " + progress + " / " + seekBar.getMax());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
seekProgress.setText("Covered: " + progressValue + " / " + seekBar.getMax());
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
如何让 SeekBar 监听器工作?
编辑:调试时出现此错误:
由以下原因引起:java.lang.NullPointerException:尝试在空对象引用
上调用虚拟方法'void android.widget.SeekBar.setOnSeekBarChangeListener(android.widget.SeekBar$OnSeekBarChangeListener)'
我有SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar1);
为什么它说它是空的?
解决方案:
我不得不告诉他这些项目的布局。
View testView = inflater.inflate(R.layout.dialog_exchange_money_farmers, null);
builder.setView(testView);
seekBar = (SeekBar) testView.findViewById(R.id.seekBar1);
seekProgress = (TextView) testView.findViewById(R.id.seekProgress);
当应用程序崩溃时,您检查过logcat吗?尝试将 seekbar 和 seekProgress 变量设置为全局变量。并在 onCreate 方法中初始化它们。
使用此代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
View view=inflater.inflate(R.layout.dialog_exchange_money_farmers,null);
builder.setView(view);
SeekBar seekBar = (SeekBar) view.findViewById(R.id.seekBar1);
seekProgress = (TextView) view.findViewById(R.id.seekProgress);
我正在尝试在自定义 AlertDialog 中使用 SeekBar,但是当我单击该按钮时它崩溃了。 自定义AlertDialog 只有一个id 为"seekProgress" 的TextView 和一个id 为"seekBar1" 的SeekBar。 如果我删除 "seekBar.setOnSeekBarChangeListener..." 它不会崩溃,但当然当我移动它时什么也不会发生。
主 activity 有一个带有 onClick="myMethod" 的按钮,我在其中创建 AlertDialog。这是此方法的代码:
public void myMethod(View view){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
builder.setView(inflater.inflate(R.layout.dialog_exchange_money_farmers, null));
SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar1);
seekProgress = (TextView) findViewById(R.id.seekProgress);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressValue;
TextView seekProgress = (TextView) findViewById(R.id.seekProgress);
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progressValue = progress;
seekProgress.setText("Covered: " + progress + " / " + seekBar.getMax());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
seekProgress.setText("Covered: " + progressValue + " / " + seekBar.getMax());
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
如何让 SeekBar 监听器工作?
编辑:调试时出现此错误: 由以下原因引起:java.lang.NullPointerException:尝试在空对象引用
上调用虚拟方法'void android.widget.SeekBar.setOnSeekBarChangeListener(android.widget.SeekBar$OnSeekBarChangeListener)'我有SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar1);
为什么它说它是空的?
解决方案: 我不得不告诉他这些项目的布局。
View testView = inflater.inflate(R.layout.dialog_exchange_money_farmers, null);
builder.setView(testView);
seekBar = (SeekBar) testView.findViewById(R.id.seekBar1);
seekProgress = (TextView) testView.findViewById(R.id.seekProgress);
当应用程序崩溃时,您检查过logcat吗?尝试将 seekbar 和 seekProgress 变量设置为全局变量。并在 onCreate 方法中初始化它们。
使用此代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
View view=inflater.inflate(R.layout.dialog_exchange_money_farmers,null);
builder.setView(view);
SeekBar seekBar = (SeekBar) view.findViewById(R.id.seekBar1);
seekProgress = (TextView) view.findViewById(R.id.seekProgress);