Форум программистов, компьютерный форум CyberForum.ru

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

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

Адаптер и ListView - Android

27.10.2014, 23:32. Просмотров 538. Ответов 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>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2014, 23:32     Адаптер и ListView
Посмотрите здесь:

Android Как создать адаптер для Gallery?
Какой адаптер посоветуете мне использовать? Android
Android Hashmap вывод в адаптер
Android Адаптер для GridView
Android Передать адаптер в Intent
ListView и кастомный адаптер Android
Адаптер Android
Как правильно построить адаптер для показа данных из базы в ListView Android
Несколько string массивов в кастомный адаптер Android
Собственный адаптер на основе ArrayAdapter Android
Адаптер для списка сообщений мессенджера Android
Кастомный адаптер listView Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kenny95
0 / 0 / 0
Регистрация: 26.02.2013
Сообщений: 15
29.10.2014, 02:20  [ТС]     Адаптер и ListView #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;
    }
 
}
Grigoriy9
1 / 1 / 0
Регистрация: 12.12.2013
Сообщений: 11
10.11.2014, 00:57     Адаптер и ListView #3
Я долго долбился с ListView и адаптерами, по мне не очень удобная штука. В конце концов забил и стал генерировать массив из View'ов и засовывать их в кагой-нибудь Layout, а его в ScrollView.
________________________________________
Метод getView адаптера будет вызван int pos раз. Внутри него нельзя ставить onItemClicklistener, определи его где-нибудь в onCreate(...).

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

Почитать на досуге: http://startandroid.ru/ru/uroki/vse-...j-adapter.html
Yandex
Объявления
10.11.2014, 00:57     Адаптер и ListView
Ответ Создать тему
Опции темы

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