Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Kenny95
0 / 0 / 0
Регистрация: 26.02.2013
Сообщений: 15
#1

Адаптер и ListView - Программирование Android

27.10.2014, 23:32. Просмотров 589. Ответов 2
Метки нет (Все метки)

Решил написать свой адаптер, работающий с listView. Беда в том, что программа вылетает сразу же.
Вот код MainActivity:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.example.itschool;
 
import java.util.ArrayList;
 
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.os.Build;
 
public class MainActivity extends ActionBarActivity {
 
    ArrayList <StudentClass> students = new ArrayList <StudentClass>();
    
    ITSchoolAdapter ITSA;
    
    ListView lv;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        StudentClass Jon = new StudentClass ();
        
        Jon.age = 19;
        Jon.name = "Evgeniy";
        Jon.secondName = "Shulga";
        Jon.patronymic = "Vladimirovich";
        
        Jon.phoneNumer = "99999999999";
        students.add(Jon);
 
        lv = (ListView) findViewById (R.id.itschoolListView);
        
        ITSA = new ITSchoolAdapter (this, students);
        
        lv.setAdapter(ITSA);
    }
}

вот файл адаптера:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.example.itschool;
 
import java.util.ArrayList;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
 
public class ITSchoolAdapter extends BaseAdapter {
 
    Context ADContext;
    ArrayList<StudentClass> ADStudents =  new ArrayList<StudentClass>();
    LayoutInflater ADLInflater;
    
    public ITSchoolAdapter(Context context, ArrayList<StudentClass> students) {
        ADContext = context;
        ADStudents = students;
        ADLInflater = (LayoutInflater) ADContext.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    }
    
    
    @Override
    public int getCount() {
        return ADStudents.size();
    }
 
    @Override
    public Object getItem(int pos) {
        return ADStudents.get(pos);
    }
 
    @Override
    public long getItemId(int pos) {
        return pos;
    }
 
    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
              view = ADLInflater.inflate(R.layout.school_item, parent, false);
            }
        StudentClass sc = (StudentClass) getItem(pos);
 
        ((TextView) view.findViewById(R.id.secondName)).setText(sc.secondName);
        ((TextView) view.findViewById(R.id.name)).setText(sc.name);
        ((TextView) view.findViewById(R.id.patronymic)).setText(sc.patronymic);
        
        return null;
    }
 
}



Java
1
2
3
4
5
6
7
8
9
package com.example.itschool;
 
public class StudentClass {
    String secondName;
    String name;
    String patronymic;
    String phoneNumer;
    int age;
}

это activity_main:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.itschool.MainActivity"
    tools:ignore="MergeRootFrame" >
 
    <ListView
        android:id="@+id/itschoolListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>
 
</RelativeLayout>
и вот activity для одного элемента listView:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?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:orientation="horizontal" >
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_launcher" />
 
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >
 
        <TextView
            android:id="@+id/secondName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Second Name" />
 
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name" />
 
        <TextView
            android:id="@+id/patronymic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Patronymic" />
 
    </LinearLayout>
 
    <Button
        android:id="@+id/call"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Call" />
 
</LinearLayout>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2014, 23:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Адаптер и ListView (Программирование Android):

ListView и кастомный адаптер - Программирование Android
Добрый день ув. Программисты! Нашёл код который заполняет ListView с кастомным адаптером. Но вот проблема ListView создаётся...

Кастомный адаптер listView - Программирование Android
Доброго времени суток, в общем впервые столкнулся с задачей создания кастомного адаптера для listView. Нашел много примеров/статей,...

Получить item из listView по индексу. Адаптер - simpleadapter - Программирование Android
Задача - убрать из listview некоторый итем. Думаю, можно сделать его прозрачным, или изменить адаптер. Прозрачно сделать не получалось....

Как правильно построить адаптер для показа данных из базы в ListView - Программирование Android
Всем привет. На данный момент все данные в программе хранятся в классе, есть адаптер для отображения данных в ListView: ArtsAdapter...

Хочу сделать подписи к меню, меню у меня создано ListView, есть два массива, как их передать в адаптер? - Программирование Android
public class MainMenu extends ListActivity { public void onCreate(Bundle cicle) { super.onCreate(cicle); ...

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

2
Kenny95
0 / 0 / 0
Регистрация: 26.02.2013
Сообщений: 15
29.10.2014, 02:20  [ТС] #2
Ошибку я нашел, в getView возвращать не null надо, а view.
Но позже появилась другая проблема. Не могу обработать onItemClickListener. В общем вот код


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.example.itschool;
 
import java.util.ArrayList;
 
import android.R.anim;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
 
public class ITSchoolAdapter extends BaseAdapter {
 
    Context ADContext;
    ArrayList<StudentClass> ADStudents =  new ArrayList<StudentClass>();
    LayoutInflater ADLInflater;
    
    public ITSchoolAdapter(Context context, ArrayList<StudentClass> students) {
        ADContext = context;
        ADStudents = students;
    }
    
    
    @Override
    public int getCount() {
        return ADStudents.size();
    }
 
    @Override
    public Object getItem(int pos) {
        return ADStudents.get(pos);
    }
 
    @Override
    public long getItemId(int pos) {
        return pos;
    }
 
    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        ADLInflater = (LayoutInflater) ADContext.getSystemService(ADContext.LAYOUT_INFLATER_SERVICE);
        
        View view = convertView;
        if (view == null) {
              view = ADLInflater.inflate(R.layout.school_item, parent, false);
            }
        
        Button btnCall = (Button) view.findViewById (R.id.call);
        
        final StudentClass sc = (StudentClass) getItem(pos);
        
        ((TextView) view.findViewById(R.id.secondName)).setText(sc.secondName);
        ((TextView) view.findViewById(R.id.name)).setText(sc.name);
        ((TextView) view.findViewById(R.id.patronymic)).setText(sc.patronymic);
        
        
        ListView lv = (ListView) view.findViewById (R.id.itschoolListView);
        
        
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> av, View view1, int position1, long id1) {
                Intent intent = new Intent(ADContext, StudentInfoActivity.class);
                ADContext.startActivity(intent);
            }
        });
 
        
        btnCall.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentCall = new Intent (Intent.ACTION_CALL, Uri.parse("tel:"+sc.phoneNumer));
                ADContext.startActivity(intentCall);                
            }
        });
        
        return view;
    }
 
}
0
Grigoriy9
1 / 1 / 0
Регистрация: 12.12.2013
Сообщений: 11
10.11.2014, 00:57 #3
Я долго долбился с ListView и адаптерами, по мне не очень удобная штука. В конце концов забил и стал генерировать массив из View'ов и засовывать их в кагой-нибудь Layout, а его в ScrollView.
________________________________________
Метод getView адаптера будет вызван int pos раз. Внутри него нельзя ставить onItemClicklistener, определи его где-нибудь в onCreate(...).

Если не поможет, в методе getView адаптера ставь обычный onClicklistener для возвращаемого view, тоже сработает.

Почитать на досуге: http://startandroid.ru/ru/uroki/vse-...j-adapter.html
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2014, 00:57
Привет! Вот еще темы с ответами:

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? - Программирование Android
Добрый день. Затрудняюсь понять один момент: У меня есть ListView, который заполнен Items. Каждый Item - это свой XML. Пока...

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru