1

我有 5 个按钮,每个按钮都有字母(按钮“H”,按钮“E”按钮“L”按钮“L”按钮“O”)组成“HELLO”这个词。我需要对这些按钮进行点击顺序,所以如果我先点击“H”,然后点击“E”,直到完成单词,应用程序会做一些事情,但如果我先点击“L”会给我一些错误消息。

做这个序列的任何想法?

谢谢

4

5 回答 5

1

我不确切知道你的流程,但你可以试试这个。

  1. 将标签设置为每个按钮作为其文本,如下所示。

    b.setTag("H");

而不是像这样。

Button b;
String name = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String s = (String) v.getTag();

            name +=s;

                          if( "HELLO".startsWith(name)){
                                  <VALID>
                          }else{
                                  <ERROR>
                          }   
        }
    });

}

name使用您的原始单词检查每个按钮单击的变量,即HELLO如上。

于 2013-02-21T06:27:05.077 回答
1

你可以做类似的事情

当活动开始时,您只需制作类似的其他按钮Enabled = false。但是使第一个按钮启用。不要使Visible=false.

现在点击按钮“H”使启用按钮“E”等等。

所以用户只需要按顺序点击按钮。按钮不能以任何随机方式按下。

试试这个,让我知道它是否有效。

于 2013-02-21T06:27:33.433 回答
1

非常有趣,完全符合您的要求..检查一次..

如果您提供任何字符串以外的其他字符串HELLO也会更好。

public class ButtonTest extends Activity
{
    private String result="";
    String sampleText   =   "HELLO";

    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);

        int noOfBtns        =   sampleText.length();

        LinearLayout ll = (LinearLayout)findViewById(R.id.btnlay);
        final TextView tvtext = (TextView)findViewById(R.id.result);

        final Button[] btns     =   new Button[noOfBtns];

        for(int i=0;i<noOfBtns;i++)
        {
            btns[i] =   new Button(this);
            btns[i].setText(sampleText.substring(i,i+1));

            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            ll.addView(btns[i], lp);

            final int j = i;
            btns[i].setOnClickListener(new OnClickListener() {

                public void onClick(View v) 
                {
                    System.out.println(j+" "+result.length());
                    if(j == result.length())
                    {
                        result = result+btns[j].getText().toString();

                        if(sampleText.startsWith(result))
                        {
                            tvtext.setText(result);
                        }
                    }
                    else
                    {
                        Toast.makeText(getApplicationContext(), "Wrong Button Pressed", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView 
        android:id="@+id/result"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:textColor="#fff"/>

    <LinearLayout 
        android:id="@+id/btnlay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal">

    </LinearLayout>

</LinearLayout>
于 2013-02-21T06:45:06.087 回答
1

尝试以下

package com.example.buttonsequence;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity
{   

    ArrayList<Button> buttonList=null;
    TextView resultTextView=null;
    Button buttons[]=null;
    String helloStr="HELLO";


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

        buttonList=new ArrayList<Button>();
        buttons=new Button[5];

        this.resultTextView=(TextView) this.findViewById(R.id.result_text);
        this.resultTextView.setText("");

        buttons[0]=(Button)this.findViewById(R.id.h_button);
        buttons[1]=(Button)this.findViewById(R.id.e_button);
        buttons[2]=(Button)this.findViewById(R.id.l_button);
        buttons[3]=(Button)this.findViewById(R.id.l2_button);
        buttons[4]=(Button)this.findViewById(R.id.o_button);

        for(int k=0;k<5;k++)
            buttons[k].setOnClickListener(onClickListener);

        Button button=(Button)this.findViewById(R.id.exit_button);
        button.setOnClickListener
        (
                new OnClickListener()
                {

                    @Override
                    public void onClick(View arg0) {
                        // TODO Auto-generated method stub
                        finish();
                    }

                }
        );
    }

    OnClickListener onClickListener=new OnClickListener() 
    {

        @Override
        public void onClick(View v)
        {
            // TODO Auto-generated method stub

            Button b=(Button)v;
            buttonList.add(b);

            int size=buttonList.size();
            if(size>0)
            {
                StringBuilder resultBuilder=new StringBuilder();
                for(int i=0;i<size;i++)
                {
                    Button tempButton=buttonList.get(i);
                    if(tempButton==buttons[i])
                    {
                        resultBuilder.append(helloStr.charAt(i));

                        if(i==4)
                        {
                            resultTextView.setText(resultBuilder.toString()+" clicked");
                            buttonList.clear();
                        }
                        else
                        {
                            resultTextView.setText(resultBuilder.toString()+" clicked");
                        }

                    }
                    else
                    {
                        buttonList.remove(i);
                        Toast.makeText(getApplicationContext(), "No correctly clicked", Toast.LENGTH_SHORT).show();
                        break;
                    }
                }
            }
            else
            {
                resultTextView.setText("Invalid pressed");
            }

        }

    };




}

activity_main.xml

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/h_button"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="H" />

    <Button
        android:id="@+id/e_button"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="E" />

    <Button
        android:id="@+id/l_button"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="L" />

    <Button
        android:id="@+id/l2_button"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="L" />

    <Button
        android:id="@+id/o_button"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="O" />

    <TextView
        android:id="@+id/result_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <Button
        android:id="@+id/exit_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Exit" />

</LinearLayout>
于 2013-02-21T07:00:00.820 回答
1

只要有一个这样的数组:

int[] tracker = new int[5];

当你点击一个按钮时,说“H”,设置tracker[0] = 1;

但是当你点击一个按钮时,说“L”,检查之前所有的按钮值是否都是1. 如果是,则将对应的tracker设置为1else,显示错误信息,并且不对tracker Array进行任何更改。

像这样的东西:

onHClick{

tracker[0] = 1;
}

onEClick{

for(int i=0; i<1; i++){
if(tracker[i] == 0){    
//show error message and return;
}else{
tracker[1] = 1;
return;
}
}
}
于 2013-02-21T07:10:11.520 回答