【问题标题】:Passing parameter from method to OnClickListener将参数从方法传递给 OnClickListener
【发布时间】:2013-11-27 16:43:57
【问题描述】:

当我单击提交按钮时,我想将字符串“Jawab”传递给 Proses 方法和 OnClick,以比较来自数据库的数据和来自 EditText 的数据,但在 OnClick 方法中无法检测到字符串 Jawab。请参阅下面的代码。

public void LoadSoal(int a, DataAdapter x)
{       
    Cursor testdata = x.getTestData(a);
    String Soal = Utility.GetColumnValue(testdata, "soal");
    String Jawab = Utility.GetColumnValue(testdata, "jawab");

    TextView textSoal = (TextView)findViewById(R.id.tekssoal);
    textSoal.setText(Soal);
    Proses(Jawab);
}

public void Proses(String x)
{               
    btnsubmit.setOnClickListener(new View.OnClickListener()
    {
    public void onClick(View v)
    {
        int skor = 0;
        TextView textScore = (TextView)findViewById(R.id.teksskor);
        EditText teksJawab = (EditText)findViewById(R.id.teksjawab);

        String jawaban = teksJawab.getText().toString();

        // TODO Auto-generated method stub
        if (x.equals(jawaban))
            {
                skor = skor + 10;
                textScore.setText(skor);
            }
        else
        {
            skor = skor + 0;
            textScore.setText(skor);
        }
    }
});
}

}

【问题讨论】:

  • Java 约定以小写开头的变量和方法名称。你得到什么错误?

标签: android parameter-passing


【解决方案1】:

改变

public void Proses(String x)

public void Proses(final String x)

【讨论】:

  • 我已经使用了这个代码并且没有错误,但我仍然无法比较字符串:D 也许代码中还有其他错误.. -_-a
  • 设置 TextView 的文本时,您必须将字符串作为参数或资源 ID 传递。如果你传递一个 int (正如你正在做的那样),它可能会给出找不到资源的异常。所以,把你的代码改成textScore.setText("" + skor);
  • 我认为这段代码有效,但我想检查更多,因为无论字符串“Jawab”和字符串“jawaban”是否相同,分数都不会改变.. x_x
【解决方案2】:

定义你自己的监听器

private class MyListener implements View.OnClickListener{
     private Context mContext;
     private String mValue;
     public MyListener(Context context, String value){
         mContext = context;
         mValue = value;
     }

     @Override
     public void onClick(View v){
        //do whatever you need here
        //if you need some view, use mContext.findViewById
     }
}

并设置监听器

btnsubmit.setOnClickListener(new MyListener(this, Jawab));

EDIT也在您的代码中,我认为findViewById 不会找到您期望的控件,因为您在侦听器的上下文中,而不是在您的活动上下文中。

【讨论】:

  • 我已经使用了这段代码,但是程序仍然没有运行..它说“没有使用字段MenuSoal.CompareAnswer.mContext的值”.. :|
  • 是的,这是一个警告,但是当我单击 btnsubmit 时,我仍然无法将数据库中的答案与 EditText 中的答案进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 2017-01-05
  • 2013-10-04
  • 2013-05-19
相关资源
最近更新 更多