ЛАБОРАТОРНА РОБОТА №3

ГРАФІЧНИЙ ІНТЕРФЕЙС КОРИСТУВАЧА. СПИСКИ

Мета роботи:ознайомитися із віджетами-списками та адаптерами даних.

 

Короткі теоретичні відомості

3.1 Віджети-списки та прив’язка даних

Для відображення даних у віджетах застосовуються адаптери, які призначені для з’єднання списку даних і відображає ці дані віджета. Самим простим адаптером для використання при з’єднанні даних є шаблонний клас ArrayAdapter<T>, наприклад:

String[] db = {“s1”, “s2”, “s3”};

ArrayAdapter<String> adapter = new ArrayAdapter <String>(this, android.R.layout.simple_list_item_1, db);

Конструктор класу ArrayAdapter приймає наступні параметри:

– об’єкт Context – екземпляр класу, який реалізує Activity;

– ідентифікатор ресурсу додатку, вбудовані системні ідентифікатори ресурсу – константи, які визначені в класі android.R.layout (simple_list_item, simple_spinner_ dropdown_item, simple_gallery_item, simple_list_item_ checked…);

– масив чи список типу List<T> об’єктів для відображення у віджеті.

3.1.1 Віджет AutoCompleteTextView

Віджет AutoCompleteTextView – це текстове поле з авто заповненням і можливістю редагуванням введеного тексту. Віджет є підкласом EditText, він дозволяє використовувати всі можливості редагування тексту. Віджет має властивість вказання мінімального числа символів, які повинен ввести користувач, для роботи функції автозаповнення списку – android:completionThreshold.

Для в’язання віджету з даним необхідно встановити адаптер через setAdapter().

 

// файл *.xml

<LinearLayout xmlns:android = "http://schemas.android. com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

<TextView

android:id="@+id/t1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Choice:" />

<Button

android:id="@+id/b1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="OK" />

<AutoCompleteTextView

android:id="@+id/mylist"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:completionThreshold="3" />

</LinearLayout>

 

// файл *.java

import android.os.Bundle;

import android.app.Activity;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.*;

import android.text.*;

 

public class MainActivity extends Activity implements TextWatcher, OnClickListener{

private TextView t1;

private AutoCompleteTextView mylist;

private String[] db = {"Jacob Anderson", "Joseph Godwin", "Joshua Harrison", "Emma Lawson"};

 

 

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

 

t1=(TextView)findViewById(R.id.t1);

 

mylist = (AutoCompleteTextView) findViewById(R.id.mylist);

mylist.addTextChangedListener(this);

mylist.setAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_dropdown_item_1line, db));

 

Button b1 = (Button) findViewById(R.id.b1);

b1.setOnClickListener(this);

}

 

public void afterTextChanged(Editable s) {

// TODO Auto-generated method stub

}

 

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

// TODO Auto-generated method stub

}

 

public void onTextChanged(CharSequence s, int start, int before, int count) {

// TODO Auto-generated method stub

}

 

public void onClick(View arg0) {

// TODO Auto-generated method stub

if (arg0.getId()==R.id.b1) t1.setText(mylist.getText());

}

}

 

Рисунок 3.1 – Застосування віджету AutoCompleteTextView

 

3.1.2 Віджет MultiAutoCompleteTextView

Віджет MultiAutoCompleteTextView – це текстове поле з авто заповненням і можливістю редагуванням введеного тексту, який розширює функціональність AutoCompleteTextView. Віджет показує авто заповнення для кожної підстроки тексту, яка розділена знаком пунктуації. Роздільник задається явно викликом метода setTokenizer():

MultiAutoCompleteTextView mylist = (MultiAutoCompleteTextView) findViewById(R.id.mylist);

mylist.addTextChangedListener(this);

 

mylist.setAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_dropdown_item_1line, db));

 

//встановлення роздільника

Mylist.setTokenizer(new MultiAutoCompleteTextView. CommaTokenizer());

 

3.1.3 Віджет ListView

Віджет має вигляд вертикального списку із прокруткою. Зв’язані зі списком дані ListView отримує від об’єкту ListAdapter. На відміну від AutoCompleteTextView в якості базового класу використовується ListActivity замість Activity. Для з’єднання об’єкта ListActivity із даними необхідно розробити клас, який реалізує інтерфейс ListAdapter. Android забезпечує два стандартних адаптера списку: SimpleAdapter (статичне з’єднання даних невеликого обсягу), SimpleCursorAdapter (великий масив даних).

 

// файл *.xml

<LinearLayout xmlns:android = "http://schemas.android. com/apk/res/android"

android:layout_width = "match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/t1"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

<ListView

android:id="@android:id/list"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

</LinearLayout>

// файл *.java

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.app.ListActivity;

import android.widget.*;

import android.view.View;

 

public class MainActivity extends ListActivity {

private String[] db = {"Jacob Anderson", "Joseph Godwin", "Joshua Harrison", "Emma Lawson"};

private TextView t1;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

t1=(TextView)findViewById(R.id.t1);

setListAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, db));

}

 

public void onListItemClick(ListView p, View v, int position, long id){

t1.setText(db[position]);

}

 

}

 

Рисунок 3.2 – Застосування віджету ListView

 

3.1.4 Створення списку із заданою компоновкою

Крім використання стандартних віджетів-списків можна створити список, визначив власну компоновку однієї строки цього списку. Такий підхід використовується для створення таблиць. Для з’єднання табличних даних використовуються класи SimpleAdapter та SimpleCursorAdapter. Конструктор SimpleAdapter має вигляд:

 

SimpleAdapter(this, list, R.layout.main, new String[] {items.item1, items.item2, …}, new int[] {R.id.item1, R.id.item2, …})

 

Приклад. Створимо список-довідник, в якому визначено ПІБ та номер телефону. В файлі main.xml опишемо два віджета TextView з іменами name та phone (компоновка горизонтальна). Для зберігання строки, яка представляє контакт, створимо окремий файл Items.java.

 

// Items.java

package com.samples.ui.lab;

import java.util.HashMap;

public class Items extends HashMap<String, String>{

private static final long serialVersionUID=1L;

public static final String NAME = “name”;

public static final String PHONE = “phone”;

public Items(String name, String phone){

super();

super.put(NAME, name);

super.put(PHONE, phone);

}}

 

// lab.java

package com.samples.ui.lab;

import java.util.ArrayList;

import android.app.ListActivity;

import android.os.Bundle;

import android.widget.*;

public class lab extends ListActivity{

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

 

ArrayList<Items> list = new ArrayList<Items>();

// заповнення контактів

list.add(new Items(“Jacob Anderson”, “420044”));

list.add(new Items(“Joseph Godwin”, “336754”));

list.add(new Items(“Joshua Harison”, “325588”));

list.add(new Items(“Emma Lawson”, “425522”));

// адаптер даних

ListAdapter a = new SimpleAdapter(this, list, R.layout.main, new String[] {Items.NAME, Items.PHONE}, new int[] {R.id.name, R.id.phone});

setListAdapter(a);

}}

Рисунок 3.3 – Створення списку заданої компоновки

 

3.1.5 Віджет Spinner

Віджет Spinner – це аналог ComboBox для Android. Віджет має два режиму android:spinnerMode: розгортаємого списку ("dropdown") та діалогу ("dialog"). Застосовується інтерфейс AdapterView.OnItemSelectedListener.

Приклад. В файлі проекту main.xml визначимо елементи TextView (id=t1) та Spinner (id=s1).

 

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.*;

public class lab extends Activity implements AdapterView.OnItemSelectedListener{

private TextView t1;

private final String[] db={…};

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

t1=(TextView)findViewById(R.id.t1);

final Spinner s1=(Spinner) findViewById(R.id.s1);

s1.setOnItemSelectedListener(this);

ArrayAdapter<String> a = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item, db);

a.setDropDownViewResource(android.R.layout.simple_ spinner_dropdown_item);

s1.setAdapter(a);

}

 

public void onItemSelected(AdapterView<?> p, View v, int position, long id){

t1.setText(db[position]);

}

public void onNothingSelected(AdapterView<?> p){

t1.setText(“”);

}

}

 

Рисунок 3.4 – Віджет Spinner (режим діалогу)

 

3.1.6 Відображення графіки в списках

Для відображення графіки в списках існують віджети GridView, Gallery, SlidingDrawer.

Для застосування віджетів необхідно наслідувати клас BaseAdapter. В класі адаптера масив даних повинен містити ідентифікатори графічних ресурсів, які будуть розміщуватися в каталозі res/drawable/. Наприклад:

private static final Integer[] im = {R.drawable.photo1, R.drawable.photo2,…};

Приклад створення класу адаптера MyImageAdapter.java.

// MyImageAdapter.java

import android.view.View;

import android.content.Context;

import android.view.ViewGroup;

import android.widget.*;

public class MyImageAdapter extends BaseAdapter{

private Context c;

private static final Integer[] im = {R.drawable.p1, R.drawable.p2, R.drawable.p3, R.drawable.p4, R.drawable.p5, R.drawable.p6};

 

public MyImageAdapter(Context cnt){c = cnt;}

 

public int getCount() { return im.length; }

 

public Object getItem(int arg0) { return im[arg0];}

 

public long getItemId(int pos) {return im[pos];}

 

public View getView(int position, View convertView, ViewGroup parent) {

ImageView v;

if(convertView == null){

v = new ImageView(c);

v.setLayoutParams(new GridView.LayoutParams(85,85));

v.setScaleType(ImageView.ScaleType.CENTER_CROP);

v.setPadding(2, 2, 2, 2);

}

else v=(ImageView) convertView;

v.setImageResource(im[position]);

return v;

}

}

1. Віджет GridView.

// main.xml

<TextView

android:id="@+id/t1" …/>

<GridView

android:id="@+id/gv"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:numColumns="auto_fit"

android:columnWidth="100px"

android:stretchMode="columnWidth"

android:gravity="center"

android:verticalSpacing="35px"

android:horizontalSpacing="5px" />

//main.java

import android.os.Bundle;

import android.app.Activity;

import android.view.View;

import android.widget.*;

public class Main extends Activity

implements AdapterView.OnItemClickListener{

private TextView t1;

private MyImageAdapter ia;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

t1 = (TextView) findViewById(R.id.t1);

final GridView gv = (GridView) findViewById(R.id.gv);

ia = new MyImageAdapter(getApplicationContext());








Дата добавления: 2014-12-24; просмотров: 970;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.055 сек.