心情小品:最近同班同學,陸陸續續開始接到面試等通知 於是分享了面試考題給我們參考!聽到這一個題目 我就聯想到 疑 這不是很像打地鼠的小遊戲嗎 XD感覺這應用方面也非常的廣泛、有趣,是一道很不錯的題目呢!這是小弟實現的方法,如果有更好方法的人 一定要跟我分享歐! 謝謝您!
Android 元件 Adapter、GridView
1.考題應用:
使用介紹: gridView.setOnItemClickListener、Handler、Adapter、中介者設計模式等運用
簡單敘述: 每一個按鈕 隨機會出現x 當按下去的時候 標題就會+1
我們開始來實現這個功能吧
詳細位置:
Layout: 新增2個按鈕 及一個Gridview
|
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.andy.blog_work_test_1.MainActivity">
<Button
android:onClick="onclick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="開始"
android:id="@+id/btn_start"
android:layout_gravity="center_horizontal" />
<Button
android:onClick="onclick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="增加 按鈕"
android:id="@+id/btn_add"
android:layout_gravity="center_horizontal" />
<GridView
android:layout_width="match_parent"
android:layout_height="384dp"
android:id="@+id/gridView"
android:layout_gravity="center_horizontal" />
</LinearLayout>
|
JAVA:
|
package com.example.andy.blog_work_test_1;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private Context context;
private GridView gridView;
private List<String> list;
private ArrayAdapter<String> adapter;
private int max = 5;
private Handler handler = new Handler();
private int number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//先尋找ID
finID();
//初值設定
initial();
//開始
startGame();
}
private void finID() {
context = this;
gridView = (GridView) findViewById(R.id.gridView);
}
private void initial() {
// Adapter設計模式
// Arraylist 和 View 透過 Adapter連結
// 先把實體給『創造』、『初值』出來,再做『連結』
//《初始》GraidView
// 4格 = 2x2 →setNumColumns(2)
//16格 = 4x4 →setNumColumns(4)
//36格 = 6x6 →setNumColumns(6)
// n格 = 根號n x 根號 n →setNumColumns()
int index = (int) (Math.sqrt(max));
gridView.setNumColumns(max);
//《創造》《初始》Arraylist
list = new ArrayList<String>();
for (int i = 1; i <= max; i++) {
list.add("●");}
//《初始》Apadter
adapter = new ArrayAdapter<String> (context, android.R.layout.simple_expandable_list_item_1, list);
//《連結》
gridView.setAdapter(adapter);
}
private void startGame(){
//《點擊》 GridView裡面的Item會觸發什麼事件
//《事件-內容》 當我點下去的item 的String為"x"時,我的number++,且在標題上顯示
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (list.get(position).toString() == "X") {
TextView tv=(TextView)view;
tv.setText("O");
number++;
setTitle(number + "");
}
}
});
}
public void onclick(View view) {
switch (view.getId()) {
case R.id.btn_start:
Log.d("start","++");
handler.post(new Runnable() {
@Override
public void run() {
方法1、方法2可以調用下唷(預設是方法2)
// 方法1();
方法2();
//如果List的內容有改變,記得要刷新一下Adapter
adapter.notifyDataSetChanged();
//1.5秒後 再請handler 做一次自己
handler.postDelayed(this, 1000);
}
});
break;
case R.id.btn_add:
//新增一個陣列
list.add("●");
//刷新
adapter.notifyDataSetChanged();
max++;
break;
}
}
|
private void 方法1() {
//先刪除陣列裡的內容
list.removeAll(list);
//先產生一個亂數 0~max之間
int random = new Random().nextInt(max);
//當我第i項=random,我第i項就改成"X",其他改成"O"
for (int i = 1; i <= max; i++) {
if (i == random) {
list.add("X");
} else {
list.add("O");
}
}
}
|
private void 方法2() {
//先在第0項 改成"X",其他項改成"O"
list.set(0, "X");
for (int i = 1; i <= max-1; i++) {
list.set(i, "O");
}
//洗牌
Collections.shuffle(list);
}
}
|
我們來看看會是怎麼樣子吧