Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
1

Как скрыть CheckBox в списке?

29.10.2015, 14:16. Показов 3791. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть ListView, в нем item'ы с чекбоксами, нужно по кнопке включать режим мультивыбора, т.е. пока не нажмешь кнопку, чекбоксы в списке не должны быть видны.

Как это можно реализовать, каким способом CheckBox'ы можно скрыть подскажите пожалуйста?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2015, 14:16
Ответы с готовыми решениями:

Скрыть содержимое окна в миниатюре отображаемой в списке последних приложений
Здравствуйте. Кто - нибудь подскажет как сделать так как показано на картинке по аналогии...

Как программно скрыть 3-4 колонки в DBGrid, используя CheckBox
Здравствуйте, подскажите, пожалуйста, как можно программно скрыть 3-4 колонки в DBGrid, используя...

Как скрыть кнопку программы из TaskBar, но оставить программу в списке приложений Диспетчера задач?
1. Как в Delphi7 под WindowsXP скрыть кнопку программы из TaskBar, но оставить программу в списке...

Скрыть блок при нажатии на checkbox
Как сделать так чтобы было наоборот, нужно при нажатии на чекбокс скрыть блок с div, а если не...

35
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
31.10.2015, 13:36  [ТС] 2
состояние чекбокса в item отражается в базе в колонке "box"

item
Кликните здесь для просмотра всего текста
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
<?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="wrap_content"
 android:orientation="horizontal">
 
<ImageView
    android:id="@+id/ivImg"
    android:layout_width="44dp"
    android:layout_height="44dp"
    android:src="@drawable/cribbook" >
 
</ImageView>
<TextView
 android:id="@+id/tvText"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center_vertical"
 android:layout_marginLeft="10dp"
    android:layout_weight="0.05"
 android:textSize="18sp">
</TextView>
 
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:focusable="false"
            android:id="@+id/checkBox"
            android:layout_gravity="center_vertical" />
 
 
</LinearLayout>


на ActionBar есть кнопка которая по задумке должна включать режим мультивыбора (т.е. отображать/скрывать чекбоксы)

попытался сделать так:

нашел в onActivityCreated вьюшку чекбокса, и а классе с ActionBar вот так вызываю метод
Java
1
FirstFragment.onMet();
который якобы должен скрывать вьюху чекбокса.

Java
1
2
3
4
5
6
7
    static void onMet (){
        
        
        chBox.setVisibility(View.INVISIBLE);
        scAdapter.notifyDataSetChanged();
        cursor.requery();
    }
крашится с такой ошибой:
Кликните здесь для просмотра всего текста
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: FATAL EXCEPTION: main
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: java.lang.NullPointerException
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at com.photocrib.FirstFragment.onMet(FirstFragment.java:91)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at com.photocrib.NavigationDrawerFragment.onOptionsItemSelected(NavigationDrawerFra gment.java:307)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v4.app.Fragment.performOptionsItemSelected(Fragment.java:1894)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.dispatchOptionsItemSelected(FragmentM anager.java:2034)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java :356)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v7.app.ActionBarActivity.onMenuItemSelected(ActionBarActivity.ja va:155)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v7.app.ActionBarActivityDelegate$1.onMenuItemSelected(ActionBarA ctivityDelegate.java:74)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v7.app.ActionBarActivityDelegateBase.onMenuItemSelected(ActionBa rActivityDelegateBase.java:556)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v7.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuB uilder.java:802)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v7.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder. java:949)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder. java:939)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:596)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.support.v7.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemV iew.java:145)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.view.View.performClick(View.java:3511)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:14105)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:605)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:92)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4424)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-31 14:24:28.968 10852-10852/com.photocrib E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
10-31 14:24:29.518 10852-10858/com.photocrib I/dalvikvm: threadid=3: reacting to signal 3
10-31 14:24:29.528 10852-10858/com.photocrib I/dalvikvm: Wrote stack traces to '/data/anr/traces.txt'
10-31 14:29:29.018 10852-10852/? I/Process: Sending signal. PID: 10852 SIG: 9


правильно ли вообще мыслю по реализации задумки?, и чего ошибка-то вроде все логично?
0
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
02.11.2015, 12:19 3
Привет. Не могу ответить из-за чего вылетает. Не вижу точно твоей логики. Но если ты передаешь в ListView ArrayList с моделью то ты в модели можешь создать поле типа boolean isCheckBoxVisible с состоянием видимости чекбокса. В зависимости от флага в адаптере устанавливаешь видимость CheckBox По нажатию на кнопке ActioBar-a устанавливаешь флаги в нужное тебе состояние и выполняешь notifyDataSetChanged();
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
02.11.2015, 12:29 4
как вообще из статического метода можно обращаться к полям класса? onMet статический
вангую что ТС просто написал первое что пришло в голову + немного кода что бы выглядело солидней
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
02.11.2015, 13:32  [ТС] 5
Никита Гриб,
Не вижу точно твоей логики
, я и сам ее пока не вижу, просто попытки, попробую разобраться в твоем ходе мыслей.

Паблито,
как вообще из статического метода можно обращаться к полям класса? onMet статический
сорри нечаянно..

вангую что ТС просто написал первое что пришло в голову + немного кода что бы выглядело солидней
ты прав, никогда не имел с чекбоксами дело, поэтому и не знаю с чего начинать -
правильно ли вообще мыслю по реализации задумки?
0
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
02.11.2015, 14:18 6
disx, Спрашивай если что.
Что ты сетишь в адаптер?
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
02.11.2015, 14:52  [ТС] 7
Никита Гриб, Ok

короче сейчас, как-то так:
Как скрыть CheckBox в списке?


тока недорубаю почему рядом с чекбоксом отображает значение из базы (из колонки box)...?!
0
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
02.11.2015, 15:02 8
disx, Покажи код адаптера
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
02.11.2015, 15:09  [ТС] 9
Никита Гриб, так а как его взять? это стандартный SimpleCursorAdapter
0
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
02.11.2015, 15:35 10
disx, Ссори . Не обратил внимание. Если ты хочешь реализовать такие фичи то тебе придётся создать свой собственный адаптер унаследованный от CursorAdapter. В методе BindView получаешь ссылку на чекбокс. И если у тебя в колонке box значение 1 делаешь чекбокс видимым иначе невидимым. http://www.gustekdev.com/2013/... t-use.html

Добавлено через 17 минут
disx, А текст рядом с чекбоксом появляется по следующей причине. Адаптер сетит по порядку каждому твоему элементу листа значение из базы. И так как в базе у тебя значения текстовые и чекбокс наследуется от TextView (У checkBox-a есть метод setText) то адаптер и устанавливает текст checkBox-а 0 или 1
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
02.11.2015, 15:39 11
disx, вот примерчик.

MainActivity.java
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
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
 
import java.util.ArrayList;
import java.util.List;
 
 
public class MainActivity extends Activity implements View.OnClickListener {
 
    List<String> data;
    CustomArrayAdapter adapter;
    ListView listView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        data = new ArrayList<>();
        fillList();
 
        Button b = (Button) findViewById(R.id.button);
        b.setOnClickListener(this);
 
        adapter = new CustomArrayAdapter(this, data);
        listView = (ListView) findViewById(R.id.mListView);
        listView.setAdapter(adapter);
    }
 
    @Override
    public void onClick(View v) {
        adapter.checkBoxVisibility();
        adapter.notifyDataSetChanged();
    }
 
    private void fillList() {
        data.add("a");
        data.add("b");
        data.add("c");
        data.add("d");
        data.add("e");
    }
}
activity_main.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CheckBox on/off"
        android:id="@+id/button" />
 
    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/mListView" />
</LinearLayout>
CustomArrayAdapter.java
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
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
 
import java.util.List;
 
public class CustomArrayAdapter extends BaseAdapter {
 
    private List<String> data;
    private LayoutInflater inflater;
 
    private boolean isCheckBoxVisible;
 
    public CustomArrayAdapter(Context context, List<String> data) {
        this.data = data;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public int getCount() {
        return data.size();
    }
 
    @Override
    public Object getItem(int position) {
        return data.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.item, parent, false);
        }
 
        ((TextView) view.findViewById(R.id.tvText)).setText(data.get(position));
        if(isCheckBoxVisible) {
            view.findViewById(R.id.checkBox1).setVisibility(View.VISIBLE);
        } else {
            view.findViewById(R.id.checkBox1).setVisibility(View.INVISIBLE);
        }
        return view;
    }
 
    public void checkBoxVisibility() {
        isCheckBoxVisible = !isCheckBoxVisible;
    }
}
и твоя разметка item.xml
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
<?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="wrap_content"
    android:orientation="horizontal">
 
    <ImageView
        android:id="@+id/ivImg"
        android:layout_width="44dp"
        android:layout_height="44dp"
        android:src="@mipmap/ic_launcher" >
 
    </ImageView>
    <TextView
        android:id="@+id/tvText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"
        android:layout_weight="0.05"
        android:textSize="18sp">
    </TextView>
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:focusable="false"
        android:id="@+id/checkBox1"
        android:layout_gravity="center_vertical" />
</LinearLayout>
1
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
05.11.2015, 15:09  [ТС] 12
Никита Гриб, Mikalai, спасибо за мысли и примеры, но пока почему-то тема с адаптерами мягко выражаясь тяжеловатая.

Чего-то накропал:
Кликните здесь для просмотра всего текста
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
public class MyCursorAdapter extends CursorAdapter {
 
    private LayoutInflater cursorInflater;
    private Context mContext;
 
    // Default constructor
    public MyCursorAdapter(Context context, Cursor cursor, int flags) {
        super(context, cursor, flags);
        cursorInflater = (LayoutInflater) context.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        mContext = context;
 
    }
 
    public void bindView(View view, Context context, Cursor cursor) {
        ImageView imageView= (ImageView) view.findViewById(R.id.ivImg);
        String titleI = cursor.getString(cursor.getColumnIndexOrThrow("img")); // img - это колонка где указан путь картинки
 
       // String mDrawableName = "myImageName";
        int resID = mContext.getResources().getIdentifier(titleI, "drawable", mContext.getPackageName());
 
        imageView.setImageResource(resID);
        TextView textView = (TextView) view.findViewById(R.id.tvText);
        String titleT = cursor.getString(cursor.getColumnIndexOrThrow("txt"));
        textView.setText(titleT);
        CheckBox checkBox= (CheckBox) view.findViewById(R.id.checkBox);
        String titleB = cursor.getString(cursor.getColumnIndexOrThrow("box"));
        checkBox.setText(titleB);
 
    }
 
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
 
        // R.layout.list_row is your xml layout for each row
        return cursorInflater.inflate(R.layout.item, parent, false);
//        return null;
    }
}

ошибок в сейчас в этом адаптере не показывает, но не уверен в правильности получения адреса картинки из базы.

но во фрагменте теперь при создании адаптера подчеркивает с таким "бОрзым уведомлением":
Как скрыть CheckBox в списке?


что еще надо в адаптере написать?
0
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
06.11.2015, 08:49 13
Посмотри. У тебя в конструкторе класса 3 элемента. А ты при создании объекта адаптера вызываешь конструктор с 5-ю элементами
Я вот так вытаскивал значения из курсора.
Для int
idChanel=Integer.parseInt(cursorChanel.getString(cursorSite.getColumnIndex("_id" )));
Для String
urlChanel=cursorChanel.getString(cursorChanel.getColumnIndex("url"));
1
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
12.11.2015, 17:02  [ТС] 14
Никита Гриб, с конструктором разобрался работает, и как вытягивать данные из курсора тоже, выполнил пример вышеприведенный Mikalai, тоже все ok и понятно, хотелось сделать более идеальное решение поэтому накопал на форуме некий стандартный пример с использованием в адаптере ViewHolder, и вроде тоже все ясно но проблема с CheckBox осталась т.е. надо всего лишь чтоб они появлялись в списке по кнопке, и пока уперся в это:

CustomAdapter:
Кликните здесь для просмотра всего текста
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
89
90
91
92
93
94
95
96
package com.example.testnewl;
 
import java.util.List;
 
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
 
public class CustomAdapter extends BaseAdapter {
    
    private List<DataEntity> data;
    private int size = 0;
    private boolean isCheckBoxVisible;
 
 
 
    public CustomAdapter(List<DataEntity> data) {
        super();
 
        this.data = data;
        size = data.size();
 
    }
 
    @Override
    public int getCount() {
        return size;
    }
 
    @Override
    public DataEntity getItem(int position) {
        return data.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Context context = parent.getContext();
        //View view = convertView;
        //CheckBox cName; = (CheckBox) findViewById(android.R.id.text2);
        ViewHolder holder;
        if(convertView == null){
            convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
            holder = new ViewHolder();
            holder.fName = (TextView) convertView.findViewById(android.R.id.text1);
            holder.sName = (TextView) convertView.findViewById(android.R.id.text2);
            holder.cName = (CheckBox) convertView.findViewById(R.id.checkBox);
 
            convertView.setTag(holder);
        }
        holder = (ViewHolder) convertView.getTag();
        DataEntity item = data.get(position);
        holder.fName.setText(item.getmFirstName());
        holder.sName.setText(item.getmSecondName());
        //holder.cName.setVisibility(View.VISIBLE);
        if(item.isWasAssingned()){
            holder.fName.setTypeface(Typeface.DEFAULT_BOLD, Typeface.BOLD);
            holder.sName.setTypeface(Typeface.DEFAULT_BOLD, Typeface.BOLD);
 
        }
        //View view = null;
        if(isCheckBoxVisible) {
            holder.cName.setVisibility(View.VISIBLE);
            //Toast.makeText(context, "Видно", Toast.LENGTH_SHORT).show();
            //view.findViewById(R.id.checkBox).setVisibility(View.VISIBLE);
        } else {
            holder.cName.setVisibility(View.INVISIBLE);
            //Toast.makeText(context, "Не Видно", Toast.LENGTH_SHORT).show();
//          view.findViewById(R.id.checkBox).setVisibility(View.INVISIBLE);
        }
 
 
        return convertView;
    }
 
    public void checkBoxVisibility() {
        isCheckBoxVisible = !isCheckBoxVisible;
 
    }
    static class ViewHolder{
        TextView fName;
        TextView sName;
        CheckBox cName;
    }
 
}


Main:
Кликните здесь для просмотра всего текста
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
package com.example.testnewl;
 
import java.util.ArrayList;
import java.util.List;
 
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
 
    public class FullscreenActivity extends Activity {
Button btn;
        CustomAdapter adapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fullscreen);
        List<DataEntity> data = new ArrayList<DataEntity>();
        data.add(new DataEntity("Sasha", "Baluev", false));
        data.add(new DataEntity("Sasha", "Peskow", true));
        data.add(new DataEntity("Kolya", "Rostorguev", false));
        data.add(new DataEntity("Sergey", "Zverev", true));
        data.add(new DataEntity("Kolya", "Waluew", false));
        data.add(new DataEntity("Boris", "Moiseev", true));
        ListView list = (ListView) findViewById(android.R.id.list);
        list.setAdapter(new CustomAdapter(data));
 
        btn = (Button)findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                adapter.checkBoxVisibility();
                adapter.notifyDataSetChanged();
            }
        });
 
 
    }
 
 
 
 
    }


вылетает такой краш:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime: FATAL EXCEPTION: main
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime: java.lang.NullPointerException
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at com.example.testnewl.FullscreenActivity$1.onClick(FullscreenActivity.java:36)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at android.view.View.performClick(View.java:2485)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:9080)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:587)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:92)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:130)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:3683)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:507)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-12 13:50:59.047 1290-1290/com.example.testnewl E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)
11-12 13:55:59.077 1290-1290/? I/Process: Sending signal. PID: 1290 SIG: 9


ругается на эту строчку
Java
1
adapter.checkBoxVisibility();
, а что не так с этим методом никак не могу понять?!
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.11.2015, 17:29 15
что непонятного?
ты создаешь адаптер тут list.setAdapter(new CustomAdapter(data));
вместо того что бы присвоить сначала переменной adapter а потом уже делать
Java
1
2
adapter = new CustomAdapter(data);
list.setAdapter(adapter);
1
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
13.11.2015, 11:13  [ТС] 16
Паблито, точно работает, осталось прикрутить CursorAdapter к проекту с фрагментами во ViewPafer.
0
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
14.11.2015, 13:37 17
Стремление к обучению это здорово. Но типичные ошибки занимают много времени и не дают дальше продвигаться в знаниях. Вот здесь первые уроки по проходи http://startandroid.ru/ru/. Вот тоже неплохой ресурсу на старте http://developer.alexanderklimov.ru/android/. И книжку по андройду на русском найди какую нибудь. Их полно. Расставит всё на свои места. Спрашивай чуть-что
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
18.11.2015, 11:42  [ТС] 18
Никита Гриб, да заглядываю на эти сайты регулярно, но пока как-то так ну и там не все есть (про ViewHolder например), дольше чем с адаптером еще ни с чем не разбирался...

сейчас новый проблем:

кусок с названиями колонок DB:
Кликните здесь для просмотра всего текста
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
    private static final String DB_NAME = "mydb";
      private static final int DB_VERSION = 2;
      public static final String DB_TABLE = "mytab";
      public static final String DB_TABLE2 = "mytab2";
      public static final String DB_TABLE3 = "mytab3";
      public static final String DB_TABLE4 = "mytab4";
      
      public static final String COLUMN_ID = "_id";
      public static final String COLUMN_IMG = "img";
      public static final String COLUMN_TXT = "txt";
      public static final String COLUMN_LNK = "lnk";
      public static final String COLUMN_BOX = "box";
      
      public static final String COLUMN_ID2 = "_id";
        public static final String COLUMN_IMG2 = "img";
        public static final String COLUMN_TXT2 = "txt";
        public static final String COLUMN_LNK2 = "lnk";
        public static final String COLUMN_BOX2 = "box";
        
        public static final String COLUMN_ID3 = "_id";
        public static final String COLUMN_IMG3 = "img";
        public static final String COLUMN_TXT3 = "txt";
        public static final String COLUMN_LNK3 = "lnk";
        public static final String COLUMN_BOX3 = "box";
        
        public static final String COLUMN_ID4 = "_id";
        public static final String COLUMN_IMG4 = "img";
        public static final String COLUMN_TXT4 = "txt";
        public static final String COLUMN_LNK4 = "lnk";
        public static final String COLUMN_BOX4 = "box";
      
      public static EditText etName=null;
     
      private static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS "
              + DB_TABLE;
      
      private static final String DB_CREATE =
                "create table " + DB_TABLE + "(" +
                  COLUMN_ID + " integer primary key autoincrement, " +
                  COLUMN_IMG + " integer, " +
                  COLUMN_TXT + " text, " +
                  COLUMN_LNK + " text, " +
                  COLUMN_BOX + " integer" +
                ");";
    
        private static final String DB_CREATE2 =
                "create table " + DB_TABLE2 + "(" +
                  COLUMN_ID2 + " integer primary key autoincrement, " +
                  COLUMN_IMG2 + " integer, " +
                  COLUMN_TXT2 + " text, " +
                  COLUMN_LNK2 + " text, " +
                  COLUMN_BOX2 + " integer" +
                ");";
        private static final String DB_CREATE3 =
                "create table " + DB_TABLE3 + "(" +
                  COLUMN_ID3 + " integer primary key autoincrement, " +
                  COLUMN_IMG3 + " integer, " +
                  COLUMN_TXT3 + " text, " +
                  COLUMN_LNK3 + " text, " +
                  COLUMN_BOX3 + " integer" +
                ");";
        private static final String DB_CREATE4 =
                "create table " + DB_TABLE4 + "(" +
                  COLUMN_ID4 + " integer primary key autoincrement, " +
                  COLUMN_IMG4 + " integer, " +
                  COLUMN_TXT4 + " text, " +
                  COLUMN_LNK4 + " text, " +
                  COLUMN_BOX4 + " integer" +
                ");";


MyCursorAdapter:
Кликните здесь для просмотра всего текста
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
public class MyCursorAdapter extends CursorAdapter {
 
 
    //public ViewGroup parent;
    private int size = 0;
    Cursor cursorx;
    private LayoutInflater cursorInflater;
 
    private boolean isCheckBoxVisible;
 
 
    public MyCursorAdapter(Context context, Cursor cursor, int flags) {
        super(context, cursor, flags);
        cursorInflater = (LayoutInflater) context.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
 
        cursorx=cursor;
 
    }
 
 
    @Override
    public int getCount() {
        return size;
    }
 
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
 
    public View getView(int position, View convertView, ViewGroup parent) {
        Context context = parent.getContext();
        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
            holder = new ViewHolder();
            holder.iName = (ImageView) convertView.findViewById(R.id.ivImg);
            holder.fName = (TextView) convertView.findViewById(R.id.tvText);
            holder.cName = (CheckBox) convertView.findViewById(R.id.checkBox);
 
            convertView.setTag(holder);
        }
        holder = (ViewHolder) convertView.getTag();
 
        String titleI = cursorx.getString(cursorx.getColumnIndexOrThrow("img"));
        //  String mDrawableName = "myImageName";
        int resID = context.getResources().getIdentifier(titleI, "drawable", mContext.getPackageName());
        holder.iName.setImageResource(resID);
 
        String titleT = cursorx.getString(cursorx.getColumnIndexOrThrow("txt"));
        holder.fName.setText(titleT);
        holder.cName.setVisibility(View.VISIBLE);
 
        if (isCheckBoxVisible) {
            //holder.cName.setVisibility(View.VISIBLE);
            //Toast.makeText(context, "Видно", Toast.LENGTH_SHORT).show();
            convertView.findViewById(R.id.checkBox).setVisibility(View.VISIBLE);
        } else {
            //holder.cName.setVisibility(View.INVISIBLE);
            //Toast.makeText(context, "Не Видно", Toast.LENGTH_SHORT).show();
            convertView.findViewById(R.id.checkBox).setVisibility(View.INVISIBLE);
        }
 
 
        return convertView;
    }
 
 
    @Override
    public void bindView(View convertView, Context context, Cursor cursor) {
        // Context
     //   mContext = parent.getContext();
     //   View view = convertView;
 
 
 
    }
    @Override
    public View newView (Context context, Cursor cursor, ViewGroup parent){
 
        // parent = parent;
        return cursorInflater.inflate(R.layout.item, parent, false);
 
      //   return null;
 
    }
    public void checkBoxVisibility() {
        isCheckBoxVisible = !isCheckBoxVisible;
 
    }
 
    static class ViewHolder {
        ImageView iName;
        TextView fName;
        CheckBox cName;
    }
 
 
}


фрагмент где создается List:
Кликните здесь для просмотра всего текста
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
public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
 
 
        makelist = new MakeList();
        makelist.execute();
 
 
    }
 
 
 
 
    class MakeList extends AsyncTask<Void, Void, Void> {
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            db = new DB(getActivity());
            db.open();
            lvData1 = (ListView) getView().findViewById(R.id.listView1);
        }
 
        @Override
        protected Void doInBackground(Void... params) {
            try {
 
                cursor = db.getAllData(arg);
                MyCursorLoader cursorLoader = new MyCursorLoader(getActivity(), db);
                cursor = cursorLoader.loadInBackground();
//              String[] from = new String[] { DB.COLUMN_IMG, DB.COLUMN_TXT };
//              int[] to = new int[] { R.id.ivImg, R.id.tvText };
 
 
 
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
 
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
//          String[] from = new String[] { DB.COLUMN_IMG, DB.COLUMN_TXT, DB.COLUMN_BOX };
//          int[] to = new int[] { R.id.ivImg, R.id.tvText, R.id.checkBox};
 
            scAdapter = new MyCursorAdapter(getActivity(), cursor,
                    0);
 
            lvData1.setBackgroundColor(Color.LTGRAY);
            lvData1.setAdapter(scAdapter);
 
            registerForContextMenu(lvData1);
            lvData1.setOnItemClickListener(new OnItemClickListener() {
                private int getSelectedItemPosition() {
                    // TODO Auto-generated method stub
 
                    return 0;
                }


не знаю что не правильно (и что правильно ), но фрагмент где должен быть список отображается пустым ?
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
18.11.2015, 11:53 19
disx, попробуйте RecyclerView - он проще для понимания(основного функционала), чем ListView.
1
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
18.11.2015, 18:34  [ТС] 20
Spelcrawler, обязательно попробую, почитал уже, действительно там проще... но очень хочу до ковырять этот кастомный CursorAdapter, это уже просто неодержимость какая-то, т.к. чувствую себя дебилом не понимая как он работает...
0
18.11.2015, 18:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2015, 18:34
Помогаю со студенческими работами здесь

Скрыть некоторые процедуры в их списке
Есть небольшая программка для Exel, состоит из двух модулей и пользовательской формы. Так вот, в...

Скрыть/отобразить строки в списке
Здравствуйте! Пишу код для кнопочки (Access), которая должна будет скрывать/отображать строки, у...

Показать/скрыть элемент при клике на checkbox
http://jsfiddle.net/alex_japson/ePCp5/ как исправить? хочу чтобы при клике на checkbox появлялся...

Скрыть одну категорию в списке категорий
Здравствуйте,у меня такая проблема,создала список категорий с материалами, все высвечиваются в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru