• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Android Samples


Commit MetaInfo

修订版ae8e5cb2346ce6598e10a37e0adf7edca4dadc36 (tree)
时间2014-06-13 04:46:46
作者Masahiko, SAWAI <say@user...>
CommiterMasahiko, SAWAI

Log Message

Added listview-multiple-choice-custom-layout module

更改概述

差异

--- /dev/null
+++ b/listview-multiple-choice-custom-layout/AndroidManifest.xml
@@ -0,0 +1,21 @@
1+<?xml version="1.0" encoding="utf-8"?>
2+<manifest
3+ xmlns:android="http://schemas.android.com/apk/res/android"
4+ package="com.example.hello.android.listview_multiple_choice_custom_layout"
5+ android:versionCode="1"
6+ android:versionName="1.0"
7+>
8+ <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="19" />
9+
10+ <application android:label="@string/app_name">
11+ <activity
12+ android:name="MainActivity"
13+ android:label="@string/app_name"
14+ >
15+ <intent-filter>
16+ <action android:name="android.intent.action.MAIN" />
17+ <category android:name="android.intent.category.LAUNCHER" />
18+ </intent-filter>
19+ </activity>
20+ </application>
21+</manifest>
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/Makefile
@@ -0,0 +1,46 @@
1+
2+all : package
3+
4+#################### build
5+
6+compile :
7+ mvn $@
8+
9+gen :
10+ mvn android:generate-sources
11+
12+package :
13+ mvn $@
14+
15+release :
16+ mvn clean -Prelease package
17+
18+install :
19+ mvn $@
20+
21+deploy :
22+ mvn package android:deploy
23+
24+undeploy :
25+ mvn android:undeploy
26+
27+rebuild :
28+ mvn clean package
29+
30+redeploy :
31+ mvn clean package android:deploy
32+
33+#################### emulator
34+
35+start :
36+ mvn android:emulator-start
37+
38+stop :
39+ mvn android:emulator-stop
40+
41+####################
42+dist :
43+ mvn assembly:assembly
44+
45+clean :
46+ mvn $@
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/README.txt
@@ -0,0 +1,11 @@
1+! listview-multiple-choice-custom-layout
2+
3+リスト項目の複数を選択できる ListView でカスタムレイアウトを使用するサンプル。
4+
5+CHOIDE_MODE_MULTIPLE を利用するにはリスト項目の View が Checkable である
6+必要がある。 このサンプルでは独自の Checkable な View として
7+NameAndEmailView を実装して使用している。これは子要素の一つに CheckedTextView
8+を置いてCheckable インターフェースに必要なメソッドをそれに委譲する方法を
9+用いて実装している。
10+
11+
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/pom.xml
@@ -0,0 +1,142 @@
1+<?xml version="1.0" encoding="UTF-8" ?>
2+<project
3+ xmlns="http://maven.apache.org/POM/4.0.0"
4+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
6+>
7+ <modelVersion>4.0.0</modelVersion>
8+ <groupId>com.example.hello</groupId>
9+ <artifactId>listview-multiple-choice-custom-layout</artifactId>
10+ <packaging>apk</packaging>
11+ <version>1.0.0</version>
12+ <name>ListView Multiple Choice with Custom Layout</name>
13+ <url>http://www.example.com/</url>
14+
15+ <parent>
16+ <groupId>com.example.hello</groupId>
17+ <artifactId>android-samples</artifactId>
18+ <version>1.0.0</version>
19+ </parent>
20+
21+ <dependencies>
22+
23+ <dependency>
24+ <groupId>android</groupId>
25+ <artifactId>android</artifactId>
26+ <version>1.5_r4</version>
27+ <!--
28+ <version>1.5_r3</version>
29+ <version>1.5_r4</version>
30+ <version>1.6_r2</version>
31+ <version>2.1.2</version>
32+ <version>2.1_r1</version>
33+ <version>2.2.1</version>
34+ <version>2.3.1</version>
35+ <version>2.3.3</version>
36+ <version>4.0.1.2</version>
37+ -->
38+ <scope>provided</scope>
39+ </dependency>
40+
41+ <dependency>
42+ <groupId>junit</groupId>
43+ <artifactId>junit</artifactId>
44+ <scope>test</scope>
45+ </dependency>
46+ </dependencies>
47+
48+ <build>
49+ <sourceDirectory>src</sourceDirectory>
50+
51+ <plugins>
52+ <plugin>
53+ <groupId>com.jayway.maven.plugins.android.generation2</groupId>
54+ <artifactId>android-maven-plugin</artifactId>
55+ <configuration>
56+ <sdk>
57+ <!--<path>${env.ANDROID_HOME}</path>-->
58+ <platform>4</platform>
59+ </sdk>
60+ </configuration>
61+ <extensions>true</extensions>
62+ </plugin>
63+
64+ <!-- mvn compile -->
65+ <plugin>
66+ <groupId>org.apache.maven.plugins</groupId>
67+ <artifactId>maven-compiler-plugin</artifactId>
68+ <configuration>
69+ <source>1.5</source>
70+ <target>1.5</target>
71+ <encoding>UTF-8</encoding>
72+ </configuration>
73+ </plugin>
74+
75+ <!-- mvn assembly:assembly -->
76+ <plugin>
77+ <groupId>org.apache.maven.plugins</groupId>
78+ <artifactId>maven-assembly-plugin</artifactId>
79+ <configuration>
80+ <descriptorRefs>
81+ <!--
82+ <descriptorRef>jar-with-dependencies</descriptorRef>
83+ <descriptorRef>bin</descriptorRef>
84+ <descriptorRef>src</descriptorRef>
85+ -->
86+ <descriptorRef>project</descriptorRef>
87+ </descriptorRefs>
88+ </configuration>
89+ </plugin>
90+
91+ <!-- mvn resources:resources -->
92+ <plugin>
93+ <groupId>org.apache.maven.plugins</groupId>
94+ <artifactId>maven-resources-plugin</artifactId>
95+ <configuration>
96+ <encoding>UTF-8</encoding>
97+ </configuration>
98+ </plugin>
99+
100+ <!-- mvn site -->
101+ <plugin>
102+ <groupId>org.apache.maven.plugins</groupId>
103+ <artifactId>maven-site-plugin</artifactId>
104+ <configuration>
105+ <locales>en</locales>
106+ <inputEncoding>UTF-8</inputEncoding>
107+ <outputEncoding>UTF-8</outputEncoding>
108+
109+ <reportPlugins>
110+ <plugin>
111+ <groupId>org.apache.maven.plugins</groupId>
112+ <artifactId>maven-project-info-reports-plugin</artifactId>
113+ </plugin>
114+
115+ <!-- mvn javadoc:javadoc -->
116+ <plugin>
117+ <groupId>org.apache.maven.plugins</groupId>
118+ <artifactId>maven-javadoc-plugin</artifactId>
119+ <configuration>
120+ <charset>utf-8</charset>
121+ </configuration>
122+ </plugin>
123+ </reportPlugins>
124+ </configuration>
125+ </plugin>
126+
127+ </plugins>
128+
129+ <!-- mvn resources:resources -->
130+ <resources>
131+ <resource>
132+ <directory>res</directory>
133+ <filtering>false</filtering>
134+ <includes>
135+ <include>**/*.properties</include>
136+ </includes>
137+ </resource>
138+ </resources>
139+ </build>
140+
141+
142+</project>
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/res/layout/main_activity.xml
@@ -0,0 +1,20 @@
1+<?xml version="1.0" encoding="utf-8"?>
2+<FrameLayout
3+ xmlns:android="http://schemas.android.com/apk/res/android"
4+ android:layout_width="fill_parent"
5+ android:layout_height="fill_parent"
6+ android:padding="2dip"
7+>
8+ <ListView
9+ android:id="@android:id/list"
10+ android:layout_width="fill_parent"
11+ android:layout_height="fill_parent"
12+ />
13+ <TextView
14+ android:id="@android:id/empty"
15+ android:layout_width="wrap_content"
16+ android:layout_height="wrap_content"
17+ android:layout_gravity="center"
18+ android:text="@string/no_data"
19+ />
20+</FrameLayout>
\ No newline at end of file
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/res/layout/name_and_email.xml
@@ -0,0 +1,39 @@
1+<?xml version="1.0" encoding="utf-8"?>
2+<LinearLayout
3+ xmlns:android="http://schemas.android.com/apk/res/android"
4+ android:layout_width="fill_parent"
5+ android:layout_height="wrap_content"
6+ android:orientation="horizontal"
7+ android:padding="4dip"
8+>
9+ <LinearLayout
10+ android:layout_width="wrap_content"
11+ android:layout_height="wrap_content"
12+ android:layout_weight="1"
13+ android:orientation="vertical"
14+ >
15+ <TextView
16+ android:id="@+id/name"
17+ android:layout_width="fill_parent"
18+ android:layout_height="wrap_content"
19+ android:text="&lt;NAME&gt;"
20+ android:textSize="22sp"
21+ />
22+ <TextView
23+ android:id="@+id/email"
24+ android:layout_width="fill_parent"
25+ android:layout_height="wrap_content"
26+ android:text="&lt;EMAIL&gt;"
27+ android:textSize="14sp"
28+ />
29+ </LinearLayout>
30+
31+ <CheckedTextView
32+ android:id="@+id/checkable"
33+ android:layout_width="wrap_content"
34+ android:layout_height="wrap_content"
35+ android:layout_weight="0"
36+ android:layout_gravity="center"
37+ android:checkMark="?android:attr/listChoiceIndicatorSingle"
38+ />
39+</LinearLayout>
\ No newline at end of file
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/res/layout/user_list_item.xml
@@ -0,0 +1,7 @@
1+<?xml version="1.0" encoding="utf-8"?>
2+<view
3+ xmlns:android="http://schemas.android.com/apk/res/android"
4+ class="com.example.hello.android.listview_multiple_choice_custom_layout.NameAndEmailView"
5+ android:layout_width="fill_parent"
6+ android:layout_height="fill_parent"
7+/>
\ No newline at end of file
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/res/values/arrays_names.xml
@@ -0,0 +1,31 @@
1+<?xml version="1.0" encoding="utf-8"?>
2+<resources>
3+ <array name="names">
4+ <item>Alice</item>
5+ <item>Bob</item>
6+ <item>Charlie</item>
7+ <item>David</item>
8+ <item>Eve</item>
9+ <item>Frank</item>
10+ <item>George</item>
11+ <item>Harvey</item>
12+ <item>Ivan</item>
13+ <item>Justin</item>
14+ <item>Kyle</item>
15+ <item>Linda</item>
16+ <item>Matilda</item>
17+ <item>Natalia</item>
18+ <item>Oscar</item>
19+ <item>Pat</item>
20+ <item>Quincy</item>
21+ <item>Rachel</item>
22+ <item>Steave</item>
23+ <item>Trent</item>
24+ <item>Urien</item>
25+ <item>Victor</item>
26+ <item>Walter</item>
27+ <item>Xenia</item>
28+ <item>Yuriya</item>
29+ <item>Zoe</item>
30+ </array>
31+</resources>
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/res/values/strings.xml
@@ -0,0 +1,6 @@
1+<?xml version="1.0" encoding="utf-8"?>
2+<resources>
3+ <string name="app_name">ListView Custom Multiple Choice</string>
4+ <string name="user_list">User List</string>
5+ <string name="no_data">NO DATA</string>
6+</resources>
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/src/com/example/hello/android/listview_multiple_choice_custom_layout/MainActivity.java
@@ -0,0 +1,124 @@
1+/*
2+ * The MIT License
3+ *
4+ * Copyright 2014 Masahiko, SAWAI <masahiko.sawai@gmail.com>.
5+ *
6+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7+ * of this software and associated documentation files (the "Software"), to deal
8+ * in the Software without restriction, including without limitation the rights
9+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+ * copies of the Software, and to permit persons to whom the Software is
11+ * furnished to do so, subject to the following conditions:
12+ *
13+ * The above copyright notice and this permission notice shall be included in
14+ * all copies or substantial portions of the Software.
15+ *
16+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+ * THE SOFTWARE.
23+ */
24+package com.example.hello.android.listview_multiple_choice_custom_layout;
25+
26+import android.app.ListActivity;
27+import android.os.Bundle;
28+import android.util.Log;
29+import android.util.SparseBooleanArray;
30+import android.widget.ListView;
31+import android.widget.SimpleAdapter;
32+import java.util.ArrayList;
33+import java.util.HashMap;
34+import java.util.List;
35+import java.util.Map;
36+
37+public class MainActivity extends ListActivity
38+{
39+
40+ private static final String LOG_TAG = "XXX";
41+ private static final String MAPPING_KEY_NAME = "name";
42+ private static final String MAPPING_KEY_EMAIL = "email";
43+ private static final String[] MAPPING_FROM =
44+ {
45+ MAPPING_KEY_NAME,
46+ MAPPING_KEY_EMAIL,
47+ };
48+ private static final int[] MAPPING_TO =
49+ {
50+ R.id.name,
51+ R.id.email,
52+ };
53+ private List<Map<String, String>> userList;
54+
55+ /**
56+ * Called when the activity is first created.
57+ */
58+ @Override
59+ protected void onCreate(Bundle savedInstanceState)
60+ {
61+ super.onCreate(savedInstanceState);
62+ setContentView(R.layout.main_activity);
63+
64+ // Init ListAdapter
65+ SimpleAdapter listAdapter = new SimpleAdapter(this, getUserList(),
66+ R.layout.user_list_item,
67+ MAPPING_FROM, MAPPING_TO);
68+ setListAdapter(listAdapter);
69+
70+ // Init ListView choice mode & default checked item
71+ ListView listView = getListView();
72+ listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
73+ listView.setItemChecked(1, true);
74+ listView.setItemChecked(2, true);
75+ }
76+
77+ @Override
78+ protected void onPause()
79+ {
80+ showCheckedUsers();
81+ super.onPause();
82+ }
83+
84+ private List<Map<String, String>> getUserList()
85+ {
86+ if (userList == null)
87+ {
88+ userList = new ArrayList<Map<String, String>>();
89+ String[] userNames = getResources().getStringArray(R.array.names);
90+ for (int i = 0; i < userNames.length; i++)
91+ {
92+ String name = userNames[i];
93+ String email = name.toLowerCase() + "@example.com";
94+ boolean checked = false;
95+ if (i % 3 == 0)
96+ {
97+ checked = true;
98+ }
99+
100+ Map<String, String> userData = new HashMap<String, String>();
101+ userData.put(MAPPING_KEY_NAME, name);
102+ userData.put(MAPPING_KEY_EMAIL, email);
103+ userList.add(userData);
104+ }
105+ }
106+ return userList;
107+ }
108+
109+ private void showCheckedUsers()
110+ {
111+ SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions();
112+ for (int i = 0; i < userList.size(); i++)
113+ {
114+ if (checkedItemPositions.get(i))
115+ {
116+ Map<String, String> userData = userList.get(i);
117+ String name = userData.get(MAPPING_KEY_NAME);
118+ String email = userData.get(MAPPING_KEY_EMAIL);
119+ String message = String.format("Checked User : name => %s, email => %s", name, email);
120+ Log.d(LOG_TAG, message);
121+ }
122+ }
123+ }
124+}
--- /dev/null
+++ b/listview-multiple-choice-custom-layout/src/com/example/hello/android/listview_multiple_choice_custom_layout/NameAndEmailView.java
@@ -0,0 +1,78 @@
1+/*
2+ * The MIT License
3+ *
4+ * Copyright 2014 Masahiko, SAWAI <masahiko.sawai@gmail.com>.
5+ *
6+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7+ * of this software and associated documentation files (the "Software"), to deal
8+ * in the Software without restriction, including without limitation the rights
9+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+ * copies of the Software, and to permit persons to whom the Software is
11+ * furnished to do so, subject to the following conditions:
12+ *
13+ * The above copyright notice and this permission notice shall be included in
14+ * all copies or substantial portions of the Software.
15+ *
16+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+ * THE SOFTWARE.
23+ */
24+package com.example.hello.android.listview_multiple_choice_custom_layout;
25+
26+import android.content.Context;
27+import android.util.AttributeSet;
28+import android.view.LayoutInflater;
29+import android.view.View;
30+import android.widget.Checkable;
31+import android.widget.FrameLayout;
32+
33+public class NameAndEmailView extends FrameLayout implements Checkable
34+{
35+
36+ private Checkable checkableView;
37+
38+ public NameAndEmailView(Context context, AttributeSet attrs, int defStyle)
39+ {
40+ super(context, attrs, defStyle);
41+ initChildViews();
42+ }
43+
44+ public NameAndEmailView(Context context, AttributeSet attrs)
45+ {
46+ super(context, attrs);
47+ initChildViews();
48+ }
49+
50+ public NameAndEmailView(Context context)
51+ {
52+ super(context);
53+ initChildViews();
54+ }
55+
56+ private void initChildViews()
57+ {
58+ LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
59+ View view = inflater.inflate(R.layout.name_and_email, null, false);
60+ checkableView = (Checkable) view.findViewById(R.id.checkable);
61+ addView(view);
62+ }
63+
64+ public void toggle()
65+ {
66+ checkableView.toggle();
67+ }
68+
69+ public void setChecked(boolean checked)
70+ {
71+ checkableView.setChecked(checked);
72+ }
73+
74+ public boolean isChecked()
75+ {
76+ return checkableView.isChecked();
77+ }
78+}
--- a/pom.xml
+++ b/pom.xml
@@ -86,6 +86,7 @@
8686 <module>listview-hello</module>
8787 <module>listview-layout-sample</module>
8888 <module>listview-multiple-choice</module>
89+ <module>listview-multiple-choice-custom-layout</module>
8990 <module>listview-simple-adapter</module>
9091 <module>listview-simple-adapter-with-viewbinder</module>
9192 <module>listview-simple-cursor-adapter</module>