单击按钮更新Textview(两者都在自定义对话框中)

时间:2014-04-11 19:44:42

标签: android button dialog textview onclicklistener

我想在自定义对话框中创建自定义键盘。 它顶部有一个Textview,下面有12个按钮(它是一个数字键盘) 我想要的是:当按下按钮时,它们会更新Textview值。 我不知道放置" OnClickListener"的正确位置。以及如何更新Textview ...

这是键盘布局:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TableRow>

    <TextView
        android:id="@+id/valor"
        android:layout_width="300dp"
        android:layout_height="wrap_content"/>

</TableRow>

<TableRow>
    <Button
        android:id="@+id/btn7"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="7"/>
    <Button
        android:id="@+id/btn8"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="8"/>
    <Button
        android:id="@+id/btn9"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="9"/>
</TableRow>

<TableRow>
    <Button
        android:id="@+id/btn4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="4"/>
    <Button
        android:id="@+id/btn5"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="5"/>
    <Button
        android:id="@+id/btn6"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="6"/>
</TableRow>

<TableRow>
    <Button
        android:id="@+id/btn1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="1"/>
    <Button
        android:id="@+id/btn2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="2"/>
    <Button
        android:id="@+id/btn3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="3"/>
</TableRow>

<TableRow>
    <Button
        android:id="@+id/btn0"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="0"/>
    <Button
        android:id="@+id/btnP"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="."/>
    <Button
        android:id="@+id/btnOk"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Ok"/>
</TableRow>

这是MainActivity:

package com.mycompany.myapp;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Button teclado = (Button)findViewById(R.id.teclado);
        teclado.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                showCustomDialog();
            }
        });
    }

    public void showCustomDialog()
    {
        final Dialog dialog = new Dialog(this);
        dialog.getWindow();
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.teclado);
        dialog.show();

        final TextView valor = (TextView) dialog.findViewById(R.id.valor);

        Button btn7 = (Button)dialog.findViewById(R.id.teclado);
        btn7.setOnClickListener(new View.OnClickListener(){
        @Override
            public void onClick(View v){
                valor.setText("Test");
            }
        });
    }
}

提前致谢!!

3 个答案:

答案 0 :(得分:0)

抱歉,我发现这个实现很奇怪。

我建议使用DialogFragment,你可以将所有内容封装在那里。 http://android-developers.blogspot.ca/2012/05/using-dialogfragments.html

您将能够在该片段中使用正常的setOnClickListener。

Button btn7 = (Button)dialog.findViewById(R.id.btn7); **"why R.id.teclado?"**
btn7.setOnClickListener(this)

您的片段可以使用开关

实现OnClickListener
@Override
public void onClick(View v)
{
    switch (v.getId())
    {
        case R.id.btn7:
            valor.setText("asdf");
            break;
        case R.id.btn8:
            ...
            break;
        ....
    }
    // TODO Auto-generated method stub

}

答案 1 :(得分:0)

好的,我想就此提出一些基本想法。你可以根据你的要求修改它。
给你的布局一个id。并使用layoutinflater在对话框中膨胀您的xml 如果您想在对话框中使用xml布局,可以这样做:

LayoutInflater inflater = getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.your_layout_id_here, (ViewGroup) getCurrentFocus());
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialoglayout);
builder.show();

将以上代码放在Button的onclicklistener中。并通过Switch案例case 1: "this button id"检查按钮的视图,然后在文本视图中插入此数字。
希望这能帮到你

答案 2 :(得分:0)

R.id.teclado不在对话框布局

变化: 按钮btn7 =(按钮)dialog.findViewById(R.id.teclado);

要: 按钮btn7 =(按钮)dialog.findViewById(R.id.btn7);