自定義GridView-聯動

這裏寫圖片描述
實現效果如圖所示。選擇省市後,第二個button自動填充對應的市。每個button對應的自定義的GridView。

1、界面XML

1、主界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            style="@style/TextViewStyle"
            android:layout_gravity="center_vertical"
            android:text="發證機關:" />

        <Button
            android:id="@+id/button1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <Button
            android:id="@+id/button2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/texthphmbt"
            style="@style/TextViewStyle"
            android:text="號牌號碼:" />

        <EditText
            android:id="@+id/txtVehNum"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:focusable="false"
            android:inputType="none" />

        <EditText
            android:id="@+id/txtVehNumInput"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:inputType="text" />
    </LinearLayout>

</LinearLayout>

2、province_grid

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical"
    android:padding="20dp" >
    <GridView
        android:id="@+id/grid_P"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:horizontalSpacing="10px"
        android:numColumns="4"
        android:scrollbars="vertical"
        android:verticalSpacing="20px" />
</LinearLayout>

3、province_item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff" >

    <RadioButton
        android:id="@+id/radiobutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="15dp"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false" />
    <TextView
        android:id="@+id/list_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:textColor="#000000" />
</LinearLayout>

2、代碼

1、資源

<!-- 區域名稱 -->
    <string-array name="area_name">     
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>      
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
    </string-array>
<string-array name="ji">
        <item>冀A</item>
        <item>冀B</item>
        <item>冀C</item>
        <item>冀D</item>
        <item>冀E</item>
        <item>冀F</item>
        <item>冀G</item>
        <item>冀H</item>
        <item>冀J</item>
        <item>冀R</item>
        <item>冀T</item>
        <item>冀O</item>
    </string-array>

2、MainActivity

package com.example.gridview_liandong;


import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity {

    private EditText txtBoxVehNum, txtBoxVehNumInput;
    private Button  button_P, button_C;
    private String[] city,province;
    private AlertDialog dialog, dialog_C;
    private Builder builder_P, builder_C;
    private LinearLayout layout_P, layout_C;
    private GridView gridView_P, gridView_C;
    private GridAdapter adapter_P, adapter_C;
    private int index = 0, index_C = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initview();
    }
    private void initview() {
        // 發證機關選擇
        button_P = (Button) findViewById(R.id.button1);
        button_C = (Button) findViewById(R.id.button2);
        txtBoxVehNum = (EditText) this.findViewById(R.id.txtVehNum);// 車牌號      
        LayoutInflater inflate_P = LayoutInflater.from(this);
        LayoutInflater inflate_C = LayoutInflater.from(this);
        layout_P = (LinearLayout) inflate_P.inflate(R.layout.province_grid, null);
        layout_C = (LinearLayout) inflate_C.inflate(R.layout.city_grid, null);
        gridView_P = (GridView) layout_P.findViewById(R.id.grid_P);
        gridView_C = (GridView) layout_C.findViewById(R.id.grid_C);
        province = this.getResources().getStringArray(
                R.array.area_name);
        adapter_P = new GridAdapter(this, province);
        gridView_P.setAdapter(adapter_P);
        builder_P = new Builder(MainActivity.this);
        builder_P.setView(layout_P);
        builder_C = new Builder(MainActivity.this);
        builder_C.setView(layout_C);
        int childId = getResources().getIdentifier(
                getPackageName() + ":array/ji ", null, null);
        city = getResources().getStringArray(childId);
        adapter_C = new GridAdapter(this, city);
        gridView_C.setAdapter(adapter_C);               
        //默認發證機關配置
        button_P.setText("冀");
        button_C.setText("冀A");
        txtBoxVehNum.setText("冀A");
        button_P.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (dialog == null) {
                    dialog = builder_P.create();
                }
                dialog.show();
            }
        });
        gridView_P.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {

                button_P.setText(getResources()
                        .getStringArray(R.array.area_name)[position]);
                dialog.dismiss();
                adapter_P.map.put(index, false);
                adapter_P.map.put(position, true);
                index = position;
                adapter_P.notifyDataSetChanged();
                int areaCodeId = getResources().getIdentifier(
                        getPackageName() + ":array/area_code", null, null);
                String[] areaCodes = getResources().getStringArray(areaCodeId);
                int childId = getResources().getIdentifier(
                        getPackageName() + ":array/" + areaCodes[position],
                        null, null);
                city = getResources().getStringArray(childId);
                adapter_C = new GridAdapter(MainActivity.this, city);
                gridView_C.setAdapter(adapter_C);
                button_C.setText(city[0]);
                txtBoxVehNum.setText(button_C.getText().toString());
            }
        });
        button_C.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {           
                if (dialog_C == null) {
                    dialog_C = builder_C.create();
                }
                dialog_C.show();
            }
        });
        gridView_C.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {      
                button_C.setText(city[position]);
                dialog_C.dismiss();
                adapter_C.map.put(index_C, false);
                adapter_C.map.put(position, true);
                index_C = position;
                adapter_C.notifyDataSetChanged();
                txtBoxVehNum.setText(button_C.getText().toString());
            }
        });
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章