Create adapter class java

Create adapter class java

Традиционные списки ListView, использующие стандартные адаптеры ArrayAdapter, прекрасно работают с массивами строк. Однако чаще мы будем сталкиваться с более сложными по структуре списками, где один элемент представляет не одну строку, а несколько строк, картинок и других компонентов.

Для создания сложного списка нам надо переопределить один из используемых адаптеров. Поскольку, как правило, используется ArrayAdapter, то именно его мы и переопределим.

Но вначале определим модель, данные которой будут отображаться в списке. Для этого добавим в от же каталог, где находится класс MainActivity, новый класс. Для этого нажмем на данный каталог правой кнопкой мыши и в меню выберем New -> Java Class :

Добавление класса java в Android Studio

В появившемся окне укажем для добавляемого класса имя State

Создание класса java в Android Studio

После добавления изменим класс State следующим образом:

package com.example.listapp; public class State < private String name; // название private String capital; // столица private int flagResource; // ресурс флага public State(String name, String capital, int flag)< this.name=name; this.capital=capital; this.flagResource=flag; >public String getName() < return this.name; >public void setName(String name) < this.name = name; >public String getCapital() < return this.capital; >public void setCapital(String capital) < this.capital = capital; >public int getFlagResource() < return this.flagResource; >public void setFlagResource(int flagResource) < this.flagResource = flagResource; >>

Данный класс хранит два строковых поля — название государства и его столицу, а также числовое поле, которое будет указывать на ресурс изображения из папки drawable, которое будет отображать флаг государства.

Далее добавим в папку res/layout новый файл list_item.xml , который будет представлять разметку одного элемента в списке:

Каждый элемент будет иметь изображение в виде ImageView и два компонента TextView для отображения названия и столицы государства.

Читайте также:  Узнать steam id css v34

После этого добавим в каталог, где находятся классы MainActivity и State, новый класс, который назовем StateAdapter :

package com.example.listapp; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; public class StateAdapter extends ArrayAdapter  < private LayoutInflater inflater; private int layout; private Liststates; public StateAdapter(Context context, int resource, List states) < super(context, resource, states); this.states = states; this.layout = resource; this.inflater = LayoutInflater.from(context); >public View getView(int position, View convertView, ViewGroup parent) < View view=inflater.inflate(this.layout, parent, false); ImageView flagView = view.findViewById(R.id.flag); TextView nameView = view.findViewById(R.id.name); TextView capitalView = view.findViewById(R.id.capital); State state = states.get(position); flagView.setImageResource(state.getFlagResource()); nameView.setText(state.getName()); capitalView.setText(state.getCapital()); return view; >>

Все взаимодействие со списком здесь будет идти через класс StateAdapter. В конструкторе StateAdapter нам надо передать в конструктор базового класса три параметра:

  • контекст, в котором используется класс. В его роли кк правило выступает класс Activity
  • ресурс разметки интерфейса, который будет использоваться для создания одного элемента в ListView
  • набор объектов, которые будут выводиться в ListView

В конструкторе StateAdapter мы получаем ресурс разметки и набор объекто и сохраняем их в отдельные переменные. Кроме того, для создания объекта View по полученному ресурсу разметки потребуется объект LayoutInflater, который также сохраняется в переменную.

В методе getView() устанавливается отображение элемента списка. Данный метод принимает три параметра:

  • position : передает позицию элемента внутри адаптера, для которого создается представление
  • convertView : старое представление элемента, которое при наличии используется ListView в целях оптимизации
  • parent : родительский компонент для представления элемента

В данном случае с помощью объекта LayoutInflater создаем объект View для каждого отдельного элемента в списке:

View view=inflater.inflate(this.layout, parent, false);

Из созданного объекта View получаем элементы ImageView и TextView по id:

ImageView flagView = (ImageView) view.findViewById(R.id.flag); TextView nameView = (TextView) view.findViewById(R.id.name); TextView capitalView = (TextView) view.findViewById(R.id.capital);

Это те элементы, которые определены в файле list_item.xml. Здесь же мы их получаем.

Читайте также:  Java web request post

Далее используя параметр position, получаем объект State, для которого создается разметка:

State state = states.get(position);

Затем полученные элементы ImageView и TextView наполняем из полученного по позиции объекта State:

flagView.setImageResource(state.getFlagResource()); nameView.setText(state.getName()); capitalView.setText(state.getCapital());

И в конце созданный для отображения объекта State элемент View возвращается из метода:

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

Изображения в ListView в Android и Java

В файле activity_main.xml определим ListView, в который будут загружатся данные:

А в файле MainActivity соединим StateAdapter с ListView:

package com.example.listapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity < ArrayListstates = new ArrayList(); ListView countriesList; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // начальная инициализация списка setInitialData(); // получаем элемент ListView countriesList = findViewById(R.id.countriesList); // создаем адаптер StateAdapter stateAdapter = new StateAdapter(this, R.layout.list_item, states); // устанавливаем адаптер countriesList.setAdapter(stateAdapter); // слушатель выбора в списке AdapterView.OnItemClickListener itemListener = new AdapterView.OnItemClickListener() < @Override public void onItemClick(AdapterViewparent, View v, int position, long id) < // получаем выбранный пункт State selectedState = (State)parent.getItemAtPosition(position); Toast.makeText(getApplicationContext(), "Был выбран пункт " + selectedState.getName(), Toast.LENGTH_SHORT).show(); >>; countriesList.setOnItemClickListener(itemListener); > private void setInitialData() < states.add(new State ("Бразилия", "Бразилиа", R.drawable.brazilia)); states.add(new State ("Аргентина", "Буэнос-Айрес", R.drawable.argentina)); states.add(new State ("Колумбия", "Богота", R.drawable.columbia)); states.add(new State ("Уругвай", "Монтевидео", R.drawable.uruguai)); states.add(new State ("Чили", "Сантьяго", R.drawable.chile)); >>

В качестве источника данных здесь выступает класс ArrayList, который получает данные в методе setInitialData. Каждому добавляемому объекту State в списке передается название государства, его столица и ресурс изображения из папки res/drawable, который представляет флаг государства.

При создании адаптера ему передается ранее созданный ресурс разметки list_item.xml и список states:

StateAdapter stateAdapter = new StateAdapter(this, R.layout.list_item, states);

Источник

Читайте также:  METANIT.COM

Create adapter class java

Learn Latest Tutorials

Splunk tutorial

SPSS tutorial

Swagger tutorial

T-SQL tutorial

Tumblr tutorial

React tutorial

Regex tutorial

Reinforcement learning tutorial

R Programming tutorial

RxJS tutorial

React Native tutorial

Python Design Patterns

Python Pillow tutorial

Python Turtle tutorial

Keras tutorial

Preparation

Aptitude

Logical Reasoning

Verbal Ability

Company Interview Questions

Artificial Intelligence

AWS Tutorial

Selenium tutorial

Cloud Computing

Hadoop tutorial

ReactJS Tutorial

Data Science Tutorial

Angular 7 Tutorial

Blockchain Tutorial

Git Tutorial

Machine Learning Tutorial

DevOps Tutorial

B.Tech / MCA

DBMS tutorial

Data Structures tutorial

DAA tutorial

Operating System

Computer Network tutorial

Compiler Design tutorial

Computer Organization and Architecture

Discrete Mathematics Tutorial

Ethical Hacking

Computer Graphics Tutorial

Software Engineering

html tutorial

Cyber Security tutorial

Automata Tutorial

C Language tutorial

C++ tutorial

Java tutorial

.Net Framework tutorial

Python tutorial

List of Programs

Control Systems tutorial

Data Mining Tutorial

Data Warehouse Tutorial

Javatpoint Services

JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.

  • Website Designing
  • Website Development
  • Java Development
  • PHP Development
  • WordPress
  • Graphic Designing
  • Logo
  • Digital Marketing
  • On Page and Off Page SEO
  • PPC
  • Content Development
  • Corporate Training
  • Classroom and Online Training
  • Data Entry

Training For College Campus

JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week

Like/Subscribe us for latest updates or newsletter RSS Feed Subscribe to Get Email Alerts Facebook Page Twitter Page YouTube Blog Page

Источник

Оцените статью