>

javacode

Tuesday, May 3, 2016

面試題目-動態加載Button


母親節檔期忙到不行.....腿和手默默發出無聲地顫抖抗議呀!!(餐飲業好可怕呀~~)...............遲來的更新m(_ _)m

    面試題目
試著做出 畫面有三個Button 亂數跑這三個Button
跑到的Button會有個 X , 當按下 X , X會消失 這時候會有個TextView紀錄案中多少次
這個做出來後
請延伸為9個按鈕 放入List裡面 將按鈕數據化 不可以使用switch去判斷

最開始三個不難做出來了,但延伸的問題讓我卡住,初學者的我來說 ,基本功沒很到位 ,稍稍做了功課後 實現了一下...

效果圖:

首先先分析 自己會需要什麼東東
1.TextView,GridLayout 用來放9個Button(這9個按鈕 我們會用動態產生出來),一個開始Button
2.不是IO或是費時的工作不要用Thread,用Handler給UI Thread執行
3.實現onClickListener

話不多說 直接實現看看

Layout:RelativeLayout

<ReliativeLayout
  .......
  .......省略......

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerHorizontal="true"
       android:text="次數"
       android:id="@+id/count"
       android:textSize="24dp"/>
   <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_centerHorizontal="true"
       android:id="@+id/start"
       android:text="start"
       android:onClick="start"/>
    <GridLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:columnCount="3"
       android:rowCount="3"
       android:id="@+id/gridlayout"/>
</RelativeLayout>

MainActivity:


public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private GridLayout gridLayout;
    private TextView textView;
    private Handler handler;
    private int counter = 0;
    private List<Button> list = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initButtons();
    }
    /*初始化*/
    public void initButtons() {
        textView = (TextView) findViewById(R.id.count);
        handler = new Handler();
        gridLayout = (GridLayout) findViewById(R.id.gridlayout);
        /*動態加載Button*/        
            for (int i = 0; i < 9; i++) {
            Button button = new Button(this);
            button.setOnClickListener(this);
            /*將Button放入List裡*/            
            list.add(button);
            /*將List放入GridLayout*/            
            gridLayout.addView(button);
        }
    }
    /*啟動Runnable*/    
    public void Start(View view) {
        textView.setText("次數 :");
        counter = 0;
        handler.post(x_random_runnable);
        handler.postDelayed(x_random_runnableStop, 10000);
    }
    private X_Random_Runnable x_random_runnable = new X_Random_Runnable();
    private X_Random_RunnableStop x_random_runnableStop = new X_Random_RunnableStop();
    /*實現onClickListener*/    
    @Override
    public void onClick(View v) {
        /*判斷按下的Button是不是 X*/
        if ("X".equals(((Button) v).getText().toString())) {
            ++counter;
            textView.setText("擊中" + counter + "次數");
            initButtonSetText();
        }
    }
    /*讓X消失*/
    private void initButtonSetText() {
        for(int i=0;i<list.size();i++){
            list.get(i).setText("");
        }
    }

    /*實現Runnable 亂數跑 9個Button*/
    private class X_Random_Runnable implements Runnable {

        @Override
        public void run() {
            int index = (int) (Math.random() * list.size());
            for (int i = 0; i < list.size(); i++) {
                if (i == index) {
                    list.get(i).setText("X");
                } else {
                    list.get(i).setText("");
                }
            }
            handler.postDelayed(this, 1500);
        }
    }
    /*停止Runnable*/
    private class X_Random_RunnableStop implements Runnable {

        @Override
        public void run() {
            handler.removeCallbacks(x_random_runnable);
        }
    }
}

GitHub
https://github.com/Brian43/MyIntervewTest

No comments :

Post a Comment