Java Can';t在OnClick中与视图及其事件交互\n OnItemClick Listener package com.example.android.miwok; //所有进口商品 公共类词汇管理器扩展应用程序{ 进度条进度; 图像按钮向上; 图像按钮关闭; 文本查看当前卷文本; //[删除变量的定义] ImageButton.OnClickListener changevol; 公共词汇管理器(活动、上下文、字符串类别){ //不必奇怪,这里的很多东西都是剪下来的 dialogview=充气机。充气(R.layout.player\u对话框,空); volup=dialogview.findviewbyd(R.id.vol_up);//MARKER#1 voldown=dialogview.findviewbyd(R.id.vol_down);//MARKER#2 progress=dialogview.findviewbyd(R.id.progress);//MARKER#3 list=(ListView)this.act.findviewbyd(R.id.词汇表\u列表); listadapter=新单词适配器(this.act,mwords); setBackgroundColor(context.getResources().getColor(R.color.category_family)); list.setAdapter(listadapter); list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){ list.setEnabled(false); Word=mwords.get(i); 定时器=新定时器(); dialog=新建AlertDialog.Builder(mContext); dialogview=充气机。充气(R.layout.player\u对话框,空); setOnClickListener(changevol); setOnClickListener(changevol); progress=dialogview.findviewbyd(R.id.progress); 当前卷文本=dialogview.findviewbyd(R.id.current\u stream\u volume); current_vol_text.setText(Integer.toString(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)); //设置“对话框”AlertDialog.Builder crdialog=dialog.create(); int result=mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener、AudioManager.STREAM\u MUSIC、AudioManager.AUDIOFOCUS\u GAIN\u TRANSIENT); 如果(结果==AudioManager.AUDIOFOCUS\u请求\u已批准){ if(mmediplayer==null){ mMediaPlayer=MediaPlayer.create(mContext,word.getAudio()); mmediplayer.start(); mmediplayer.setOnCompletionListener(mcCompletionListener); } } setMax(mmediplayer.getDuration()); 进度。设置进度(0); crdialog.show(); ttask=新时间任务(){ @凌驾 公开募捐{ if(mmediplayer!=null){ progress.setProgress(mmediplayer.getCurrentPosition()); } } }; timer.scheduleAtFixedRate(ttask,0,50); } }); changevol=newview.OnClickListener(){ @凌驾 公共void onClick(视图){ if(view.getId()==R.id.vol\u up){ mAudioManager.adjustStreamVolume(AudioManager.STREAM\u MUSIC,AudioManager.Adjustu\u RAISE,0); } 否则{ mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.Adjustu_LOWER,0); } current_vol_text.setText(Integer.toString(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)); } }; } }

Java Can';t在OnClick中与视图及其事件交互\n OnItemClick Listener package com.example.android.miwok; //所有进口商品 公共类词汇管理器扩展应用程序{ 进度条进度; 图像按钮向上; 图像按钮关闭; 文本查看当前卷文本; //[删除变量的定义] ImageButton.OnClickListener changevol; 公共词汇管理器(活动、上下文、字符串类别){ //不必奇怪,这里的很多东西都是剪下来的 dialogview=充气机。充气(R.layout.player\u对话框,空); volup=dialogview.findviewbyd(R.id.vol_up);//MARKER#1 voldown=dialogview.findviewbyd(R.id.vol_down);//MARKER#2 progress=dialogview.findviewbyd(R.id.progress);//MARKER#3 list=(ListView)this.act.findviewbyd(R.id.词汇表\u列表); listadapter=新单词适配器(this.act,mwords); setBackgroundColor(context.getResources().getColor(R.color.category_family)); list.setAdapter(listadapter); list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){ list.setEnabled(false); Word=mwords.get(i); 定时器=新定时器(); dialog=新建AlertDialog.Builder(mContext); dialogview=充气机。充气(R.layout.player\u对话框,空); setOnClickListener(changevol); setOnClickListener(changevol); progress=dialogview.findviewbyd(R.id.progress); 当前卷文本=dialogview.findviewbyd(R.id.current\u stream\u volume); current_vol_text.setText(Integer.toString(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)); //设置“对话框”AlertDialog.Builder crdialog=dialog.create(); int result=mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener、AudioManager.STREAM\u MUSIC、AudioManager.AUDIOFOCUS\u GAIN\u TRANSIENT); 如果(结果==AudioManager.AUDIOFOCUS\u请求\u已批准){ if(mmediplayer==null){ mMediaPlayer=MediaPlayer.create(mContext,word.getAudio()); mmediplayer.start(); mmediplayer.setOnCompletionListener(mcCompletionListener); } } setMax(mmediplayer.getDuration()); 进度。设置进度(0); crdialog.show(); ttask=新时间任务(){ @凌驾 公开募捐{ if(mmediplayer!=null){ progress.setProgress(mmediplayer.getCurrentPosition()); } } }; timer.scheduleAtFixedRate(ttask,0,50); } }); changevol=newview.OnClickListener(){ @凌驾 公共void onClick(视图){ if(view.getId()==R.id.vol\u up){ mAudioManager.adjustStreamVolume(AudioManager.STREAM\u MUSIC,AudioManager.Adjustu\u RAISE,0); } 否则{ mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.Adjustu_LOWER,0); } current_vol_text.setText(Integer.toString(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)); } }; } },java,android,button,onclick,imagebutton,Java,Android,Button,Onclick,Imagebutton,此代码的问题是:我试图更改OnClickListener(volchange)中两个按钮volup和voldown的STREAM\u MUSIC音量。出于某种原因,OnClickListener没有启动,但如果我打开logcat,则不会显示错误、警告或可疑日志。是什么导致了这种行为 正如前面提到的注释一样,代码中不必要的部分是 这篇文章的剪贴画 尝试删除ImageButton本地声明的final关键字我认为您需要从ImageButton中删除“final”。要解决此问题,在对话框视图充气后,初始

此代码的问题是:我试图更改OnClickListener(
volchange
)中两个按钮
volup
voldown
STREAM\u MUSIC
音量。出于某种原因,OnClickListener没有启动,但如果我打开logcat,则不会显示错误、警告或可疑日志。是什么导致了这种行为

正如前面提到的注释一样,代码中不必要的部分是 这篇文章的剪贴画


尝试删除ImageButton本地声明的final关键字

我认为您需要从ImageButton中删除“final”。

要解决此问题,
对话框视图
充气后,初始化OnItemClickListener中的
volup
voldown-ImageButtons。
尽管小部件是在类构造函数中初始化的,但这一步需要完成。 对于能够通过调用相关方法在UIThread上更新的每个其他视图/小部件,都应该执行相同的过程

为什么会有这种行为? 从理论上讲,在类构造函数中膨胀
对话框view
之后,我们可以正确初始化视图和小部件。
但是,当我们在构造函数中膨胀
对话框视图时(在初始化OnItemClickListener之前),布局本身会在调用构造函数之后直接膨胀,然后从“二进制”膨胀的布局中,我们会得到视图。但问题来了:每次触发OnItemClickListener时,一个新的二进制布局就会膨胀并保存到
dialogview
中。因此,现在应用于
对话框的布局
是从
dialogview
-变量创建的新二进制布局,但是
volup
&
voldown
图像按钮仍然引用先前创建的二进制布局,当我们调用类构造函数时。显然,如果我们每次创建
对话框视图
后都初始化ImageButtons,那么按钮引用的是正确的,新的膨胀布局。

删除最后一个关键字不会改变行为。删除最后一个关键字不会改变行为。请您的问题向我们展示
AlertDialog
代码的其余部分。+Mike M我已经得到错误修复,我很快将自己添加答案。
package com.example.android.miwok;

//all the imports

public class VocabularyManager extends Application{
    ProgressBar progress;
    ImageButton volup;
    ImageButton voldown;
    TextView current_vol_text;
    //[Cut-out Definitions of Variables]
    ImageButton.OnClickListener changevol;
    public VocabularyManager(Activity activity, Context context, String Category) {
        //Don't wonder, many things up here are also cut-out
        dialogview = inflater.inflate(R.layout.player_dialog, null);
        volup = dialogview.findViewById(R.id.vol_up); //MARKER #1
        voldown = dialogview.findViewById(R.id.vol_down); //MARKER #2
        progress = dialogview.findViewById(R.id.progress); //MARKER #3
        list = (ListView) this.act.findViewById(R.id.vocabulary_list);

        listadapter = new WordAdapter(this.act, mwords);

        list.setBackgroundColor(context.getResources().getColor(R.color.category_family));

        list.setAdapter(listadapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                list.setEnabled(false);
                Word word = mwords.get(i);
                timer = new Timer();
                dialog = new AlertDialog.Builder(mContext);
                dialogview = inflater.inflate(R.layout.player_dialog, null);
                volup.setOnClickListener(changevol);
                voldown.setOnClickListener(changevol);
                progress = dialogview.findViewById(R.id.progress);
                current_vol_text = dialogview.findViewById(R.id.current_stream_volume);
                current_vol_text.setText(Integer.toString(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)));
                //Setting up the 'dialog' AlertDialog.Builder
                crdialog = dialog.create();
                int result = mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
                if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
                    if(mMediaPlayer == null) {
                        mMediaPlayer = MediaPlayer.create(mContext, word.getAudio());
                        mMediaPlayer.start();
                        mMediaPlayer.setOnCompletionListener(mCompletionListener);
                    }
                }
                progress.setMax(mMediaPlayer.getDuration());
                progress.setProgress(0);
                crdialog.show();
                ttask = new TimerTask() {
                    @Override
                    public void run() {
                        if(mMediaPlayer != null) {
                            progress.setProgress(mMediaPlayer.getCurrentPosition());
                        }
                    }
                };
                timer.scheduleAtFixedRate(ttask, 0, 50);
            }
        });
        changevol = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(view.getId() == R.id.vol_up){
                    mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,0);
                }
                else{
                    mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,0);
                }
                current_vol_text.setText(Integer.toString(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)));
            }
        };
    }
}