当前位置: 首页 > 面试题库 >

在父级或祖先上下文中找不到方法

邵兴文
2023-03-14
问题内容

我处理这个问题已有一段时间了,研究了我可以找到的所有相关问题,例如:这个,这个和这个。您能帮我解决这个错误吗?这是logcat抛出的唯一一个。

java.lang.IllegalStateException: Could not find method playPauseMusic(View) in a parent or
ancestor Context for android:onClick attribute defined on view class
android.support.v7.widget.AppCompatImageButton with id 'playPause'

相关代码

radio.java

package com.example.jacob.wutk;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;

import java.io.IOException;

public class radio extends AppCompatActivity {

    /** Called when the user touches the button */

    public void playPauseMusic (View view, final ImageButton playPause) throws IOException {
        String url = "http://streamer.cci.utk.edu:8000/wutk-vorbis"; // your URL here
        final MediaPlayer mediaPlayer = new MediaPlayer();

        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            public void onPrepared(MediaPlayer mediaPlayer){
                mediaPlayer.start();
            }
        });

        playPause.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view) {
                if (mediaPlayer.isPlaying()) {
                    mediaPlayer.pause();
                    playPause.setImageResource(R.drawable.play1);
                } else {
                    playPause.setImageResource(R.drawable.pause1);
                }
            }
        });
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setDataSource(url);
        mediaPlayer.prepareAsync();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio);
    }
}

activity_radio.xml

    <?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    tools:context="com.example.jacob.wutk.radio">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|center_vertical"
        android:scaleType="centerCrop"
        android:src="@drawable/background_mic1"/>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingBottom="1.0dip"
        android:paddingLeft="4.0dip"
        android:paddingRight="4.0dip"
        android:paddingTop="5.0dip">
       <ImageButton
           android:id="@+id/playPause"
           android:layout_width="0.0dip"
           android:layout_height="wrap_content"
           android:layout_weight="1.0"
           android:background="?android:selectableItemBackground"
           android:clickable="true"
           android:onClick="playPauseMusic"
           android:scaleType="fitCenter"
           android:src="@drawable/play1"/>
       <ImageView
           android:layout_width="0.0dip"
           android:layout_height="fill_parent"
           android:layout_marginRight="5dp"
           android:layout_weight="1.0"
           android:background="?android:selectableItemBackground"
           android:scaleType="fitCenter"
           android:src="@drawable/logo"/>

    </LinearLayout>

</FrameLayout>

问题答案:

定义onClickxml您需要定义它特定视图方式在这里ImageButton你不能在该方法两个参数。

您的错误还表示 无法找到方法playPauseMusic(View) 意味着编译器需要 带有单个参数View_的 _公共方法
,而您有两个参数:ViewImageButton

这就是为什么您得到该错误的原因。只需从方法中删除一个参数,它将起作用。

像这样做 :

public class radio extends AppCompatActivity {

    /** Called when the user touches the button */

    public void playPauseMusic (View playPause) {
        String url = "http://streamer.cci.utk.edu:8000/wutk-vorbis"; // your URL here
        final MediaPlayer mediaPlayer = new MediaPlayer();

        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            public void onPrepared(MediaPlayer mediaPlayer){
                mediaPlayer.start();
            }
        });


        if (mediaPlayer.isPlaying()) {
             mediaPlayer.pause();
             ((ImageButton)playPause).setImageResource(R.drawable.play1);
        } else {
            ((ImageButton)playPause).setImageResource(R.drawable.pause1);
        }

        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setDataSource(url);
        mediaPlayer.prepareAsync();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio);
    }
}

再写
一遍android:onClick="playPauseMusic"意味着该方法playPauseMusic将在Button单击时调用,因此您已经定义了Button单击,因此
无需在方法内部定义它playPause.setOnClickListener因此我删除了该代码。



 类似资料:
  • 我已经处理这个问题有一段时间了,并查看了我能找到的所有相关问题,例如:这个问题,这个问题和这个问题。你能帮我纠正这个错误吗?这是唯一一个被圆木扔出去的。 相关代码: radio.java 无线电活动。xml

  • 问题内容: 我已经看到有一些类似的问题,但是到目前为止,这些问题的答案并没有帮助我。完整错误: java.lang.IllegalStateException:在视图类android.support.v7.widget.AppCompatButton上定义的ID为“ button_random”的android:onClick属性中,在父级或祖先上下文中找不到onClick(View)方法 类(

  • 正在执行热重启。..正在将文件同步到设备sdk gphone x86 arm...在1,910毫秒内重新启动应用程序。 widgets library捕获异常widgets library捕获异常widgets library捕获异常widgets library捕获异常widgets library捕获异常widgets library捕获异常widgets library捕获异常widgets

  • 问题内容: 我有一个如下的二叉树。我需要找到最不常见的祖先(LCA)。例如6和4的LCA为1,4和5的LCA为2。 谁能建议我该如何解决这个问题? 问题答案: 从普通的深度优先搜索算法开始: 现在,将其修改为采用两个“目标”参数,即target1和target2。 当搜索target1带您离开,而搜索target2带您去时,您已经找到了LCA。 假设两个目标确实存在。如果需要断言它们确实如此,则需

  • 问题内容: 我知道这是在黑暗中拍摄的,但是有没有办法仅使用CSS,CSS2,没有jquery,没有javascript来选择和设置元素祖先的样式?我已经遍历了选择器,但是发布了它,以防万一我错过了一些东西或者有一个聪明的解决方法。 例如,假设我有一个嵌套在div中的类名称为“ test”的表。是否有某种: 问题答案: CSS2或CSS3中没有父选择器之类的东西。实际上,可能永远不会存在,因为一旦开

  • 问题内容: 将多个文件的内容合并到一个文件中以作为Redux的配置后,Redux的配置出现问题。 如何解决,同时将其保存在一个文件中? 未处理的JS异常:在“ Connect(App)”的上下文或道具中找不到“商店”。可以将根组件包装在中,也可以将“存储”作为道具明确传递给“ Connect(App)”。 问题答案: 提供程序, 将商店传递 给嵌套在其中的组件,通常只需要将其应用于 根 组件(在您