因此,当我们将onClickListener设置为一个Button时,它看起来像这样。
private Button myButton = (Button) findViewById(R.id.my_button);
myButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//do this
}
});
因此,当我们声明新的View.OnClickListener ...并实现OnClickListener接口/并覆盖它的onClick方法时,我们正在创建一个无名的匿名类。我不明白的是,如果我们没有引用这个anon类,因为它是无名的,onClick()方法是如何被调用的?我只实现了一个匿名类来覆盖所述类中的某些方法,如下所示:
public class Foo{
public void bar(){
//do something
}
}
Foo foo = new Foo(){
@Override
public void bar(){
//do something else
}
}
这对我来说非常有意义,因为现在,只要我使用“foo”引用调用bar()方法,该引用将使用重写版本的bar。对于Button,没有对onClick()的引用。我对此感到困惑。
答案 0 :(得分:4)
如果它有助于您的理解,您可以改写:
View.OnClickListener listener = new View.OnClickListener(){
@Override
public void onClick(View view){
//do this
}
};
myButton.setOnClickListener(listener);
该按钮在侦听器超出范围后保存引用,并且可以在保持的侦听器对象上调用onClick
回调。
答案 1 :(得分:1)
我不明白,如果我们没有引用这个anon类,因为它是无名的,onClick()方法是如何被调用的?
<?php
set_time_limit(0);
ini_set('memory_limit', '256M');
$description = $_POST['languages'];
//enabline a file to be displayed as HTML for download start
$filename = basename( $_FILES["file"]["name"]);
header('Content-disposition: attachment; filename=' .$filename.'.html');
header('Content-type: text/html;charset=utf-8');
//enabline a file to be displayed as HTML for download end
//writting javascript functions to run text to speech on word click start
echo("<!DOCTYPE html><html>");
echo("<head><META HTTP-EQUIV='content-type' CONTENT='text/html; charset=utf-8'><title>".$filename."</title>");
echo("<script>");
echo("function speakIt(b)");
echo("{");
echo("if (document.getElementById(\"myCheck\").checked){");
echo("if ('speechSynthesis' in window){");
echo("var sometext=b;");
echo("var msg = new SpeechSynthesisUtterance();");
echo("var voices = window.speechSynthesis.getVoices();");
echo("msg.text = sometext;");
$textToSpeech = explode ("-",$description);
$languageCode = "";
switch ($textToSpeech[0]) {
case "de"://German
$languageCode = "de-DE";
break;
case "en"://English
$languageCode = "en-GB";
break;
case "es"://Spanish
$languageCode = "es-ES";
break;
case "fr"://French
$languageCode = "fr-FR";
break;
case "ru"://Russian
$languageCode = "ru";
break;
case "pt"://Portuguese - Portugal
$languageCode = "pt-PT";
break;
case "sr"://Serbian
$languageCode = "sr-SP";
break;
case "ja"://Japanese
$languageCode = "ja";
break;
case "he"://Hebrew
$languageCode = "he";
break;
case "it"://Italian - Italy
$languageCode = "it-IT";
break;
case "el"://Greek
$languageCode = "el";
break;
case "zh"://Chinese - China
$languageCode = "zh-CN";
break;
case "ar"://Arabic - Egypt
$languageCode = "ar-EG";
break;
case "hy"://Armenian
$languageCode = "hy";
break;
case "eu"://Basque
$languageCode = "eu";
break;
case "be"://Belarusian
$languageCode = "be";
break;
case "cs"://Czech
$languageCode = "cs";
break;
case "da"://Danish
$languageCode = "da";
break;
case "et"://Estonian
$languageCode = "et";
break;
case "mk"://FYRO Macedonia
$languageCode = "mk";
break;
case "hu"://Hungarian
$languageCode = "hu";
break;
case "is"://Icelandic
$languageCode = "is";
break;
case "hi"://Hindi
$languageCode = "hi";
break;
case "id"://Indonesian
$languageCode = "id";
break;
case "kk"://Kazakh
$languageCode = "kk";
break;
case "ko"://Korean
$languageCode = "ko";
break;
case "lv"://Latvian
$languageCode = "lv";
break;
case "lt"://Lithuanian
$languageCode = "lt";
break;
case "pl"://Polish
$languageCode = "pl";
break;
case "sk"://Slovak
$languageCode = "sk";
break;
case "sl"://Slovenian
$languageCode = "sl";
break;
case "sv"://Swedish - Sweden
$languageCode = "sv-SE";
break;
case "tr"://Turkish
$languageCode = "tr";
break;
case "uk"://Ukrainian
$languageCode = "uk";
break;
case "vi"://Vietnamese
$languageCode = "vi";
break;
//...add more language support
default:
$languageCode = "de-DE";
}
echo("msg.lang = '".$languageCode."';");
//echo("alert(a);");
echo("speechSynthesis.speak(msg);");
echo("}");
echo("}");
echo("}");
echo("</script>");
echo(" <style> ");
echo("#ebook {");
echo(" margin: auto;");
echo("width: 90%;font-size: 200%;@page {counter-increment: page;counter-reset: page 1;@top-right {content: \"Page \" counter(page) \" of \" counter(pages);}}");
echo("text-align: left;line-height:1.5;font-family: 'Merriweather', Georgia, 'Times New Roman', Times, serif;");
echo("vertical-align: middle;");
echo("word-wrap: break-word;");
echo("border:3px solid #8AC007;");
echo("padding: 10px;");
echo("}");
echo("#header-wrap {");
echo("position: fixed;");
echo("text-align: center;");
echo("background-color: #8AC007;");
echo("color: white;");
echo("height: 25px;");
echo("top: 0;");
echo("width: 100%;");
echo("z-index: 100;");
echo("}");
echo("</style>");
echo("</head><body>");
echo("<div id='header-wrap'>");
echo("<span>ENABLE / DISABLE TEXT TO SPEECH : <input type=\"checkbox\" name=\"myCheck\" id=\"myCheck\" checked=\"checked\"></span></br></br>");
echo("</div>");
echo("</br>");
echo("<div id='ebook'>");
echo("</br>");
//writting javascript functions to run text to speech on word click end
//chech the details of the uploaded file start
$uploadOk = 1;
$imageFileType = pathinfo($filename,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
// Check file size
if ($_FILES["file"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "txt" && $imageFileType != "pdf" ) {
echo "Sorry, only .txt, .pdf files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
}
//chech the details of the uploaded file end
//setup database connection start
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "dictionary";
$conn = new mysqli($servername, $username, $password, $dbname);
$table_name=str_replace("-","to",$description);
//setup database connection end
//processing the data start
$handle = fopen($_FILES["file"]["tmp_name"], "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
$words=explode(" ",$line);
foreach ($words as $value)
{
$translated_word=" ";
$callWorf=str_replace(".", "",$value);
$callWorf=str_replace(",", "",$callWorf);
$callWorf=str_replace("!", "",$callWorf);
$callWorf=str_replace("?", "",$callWorf);
$callWorf=str_replace("-", "",$callWorf);
$callWorf=str_replace("ß", "ss",$callWorf);
$callWorf=str_replace(":", "", $callWorf);
$callWorf=str_replace(";", "", $callWorf);
$callWorf=str_replace("\"", "", $callWorf);
$callWorf=str_replace("»", "", $callWorf);
$callWorf=str_replace("«", "", $callWorf);
$callWorf=str_replace("..", "",$callWorf);
$callWorf=str_replace("\n", "",$callWorf);
$callWorf=trim($callWorf);
$sql = "select translated FROM ".$table_name." where native='".$value."' limit 1;";
//echo $sql;
$result = mysqli_query($conn, $sql);
// output data of each row
while($row = mysqli_fetch_array($result)) {
$translated_word=$row["translated"];
//THIS IS WHERE I FAIL TO GET RESULTS ALTHOUGH WHEN I RUN THE STANDALONE QUERY IN WORKS FINE
}
echo "<span onclick=\"alert('".$translated_word."');speakIt('".$callWorf."'); \" >".$value." </span>";
}
echo '</br>';
}
fclose($handle);
}
//processing the data end
mysqli_close($conn);
echo("</div></body></html>")
?>
持有您创建的匿名内部类的实例。因此,myButton
可以在其上调用myButton
。
答案 2 :(得分:1)
在按钮对象中调用onclick事件,此对象将使用您设置的引用委托您的匿名类onclick。