Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Пустое место в ListView при заполнении из файла

Есть ScrollView, внутри него LinearLayout, внутри которого статически созданы 2 кнопки "Открыть" и "Создать" обе кнопки вызывают рекурсивный генератор интерфейса, сам интерфейс создает неограниченное количество однотипных элементов - LL внутри него EditText,ImageButton и ListView.
Генератор интерфейса⇓
Кликните здесь для просмотра всего текста
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
   public void generateLevels(int levelId, String parentLVitem) {
        LinearLayout.LayoutParams LLParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams RLparamsL = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams RLparamsR = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
 
 
        final LinearLayout layvar = (LinearLayout) findViewById(R.id.LL1);
        //уровень
        final LinearLayout layout;
        if ((LinearLayout) findViewById(levelId) == null) {
            layout = new LinearLayout(this);
            layout.setId(levelId);
            layout.setLayoutParams(LLParams);
            layout.setOrientation(LinearLayout.VERTICAL);
            layvar.addView(layout);
 
            TextView tvlevel = new TextView(this);
            tvlevel.setLayoutParams(LLParams);
 
            int k = 0;
 
           // Log.d("id", String.valueOf(levelId));
            for (int i = 0; i < 10; i++) {
                //Log.d("arr", String.valueOf(arrId[i]));
                if (arrId[i] == levelId) {
                    k = i + 1;
                   // Log.d("k", String.valueOf(k));
                    break;
                }
            }
 
            tvlevel.setText("Уровень " + k);
            tvlevel.setTextSize(24);
            layout.addView(tvlevel);
        } else {
            layout = (LinearLayout) findViewById(levelId);
        }
        //ЛЛ элемента
        final LinearLayout laycontainer = new LinearLayout(this);
        laycontainer.setId(hash(parentLVitem + "lay"));
        laycontainer.setLayoutParams(LLParams);
        laycontainer.setOrientation(LinearLayout.VERTICAL);
 
        TextView tv = new TextView(this);
        tv.setId(hash(parentLVitem + "tv"));
 
        RLparamsL.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        RLparamsL.addRule(RelativeLayout.LEFT_OF, R.id.but_var);
        RLparamsR.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
 
        final EditText et = new EditText(this);
        et.setId(hash(parentLVitem + "et"));
 
        final ImageButton ibut = new ImageButton(this);
        ibut.setId(hash(parentLVitem + "but"));
 
        final ListView lv = new ListView(this);
        lv.setId(hash(parentLVitem + "lv"));
 
        RelativeLayout laysub = new RelativeLayout(this);
 
        InputFilter[] fa = new InputFilter[1];
        fa[0] = new InputFilter.LengthFilter(25);
 
        layout.setOrientation(LinearLayout.VERTICAL);
        layout.setLayoutParams(LLParams);
 
        tv.setText("Элементы критерия " + parentLVitem);
        tv.setLayoutParams(LLParams);
        tv.setTextSize(20);
 
        et.setHint("Введите название");
        et.setLayoutParams(RLparamsL);
        et.setFilters(fa);
 
        ibut.setLayoutParams(RLparamsR);
        ibut.setImageResource(R.drawable.ic_action_add);
 
        laysub.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
 
        // Создаём пустой массив для хранения критериев
        final ArrayList<String> ar = new ArrayList<>();
 
        // Создаём адаптер ArrayAdapter, чтобы привязать массив к ListView
        final ArrayAdapter<String> ad;
        ad = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, ar);
 
        // Привяжем массив через адаптер к ListView
        lv.setAdapter(ad);
        // Прослушиваем нажатия клавиш
        ibut.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (ar.size() < 10) {
                    if (et.length() != 0) {
                        ar.add(0, et.getText().toString());
 
                        int k = 0;
                        int ki = 0;
                        int idpar = ((LinearLayout) laycontainer.getParent()).getId();
                       // Log.d("laypar", String.valueOf(idpar));
                        for (int i = 0; i < 10; i++) {
                            if (arrId[i] == idpar) {
                                ki = i + 1;
                                if (ki != 10) {
                                    k = arrId[i + 1];
                                    break;
                                }
                            }
                        }
 
                        if (ki != 10)
                            generateLevels(k, et.getText().toString());
                        et.setText("");
                        setListViewHeightBasedOnChildren(lv);
                        ad.notifyDataSetChanged();
                    } else {
                        Toast.makeText(getApplicationContext(), "Введите название!", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(getApplicationContext(), "Больше 10 нельзя=)", Toast.LENGTH_SHORT).show();
                    et.setText("");
                }
            }
        });
        //ОБРАБОТКА КЛИКА НА ИТЕМ ЛИСТВИЕВА КРИТЕРИЕВ
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View itemClicked, final int position, long id) {
                AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this);
                adb.setTitle("Удалить?");
                adb.setMessage("Удалить критерий "" + ar.get(position) + "" ?");
                final int positionToRemove = position;
                adb.setNegativeButton("Отмена", null);
                adb.setPositiveButton("Ок", new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        LinearLayout lllevel = (LinearLayout) ((LinearLayout) lv.getParent()).getParent();
                        LinearLayout ll;
                        String str;
                        int k = 0;
                        for (int i = 0; i < arrId.length; i++) {
                            if (lllevel.getId() == arrId[i]) {
                                k = arrId[i + 1];
                            }
                        }
                        lllevel = (LinearLayout) findViewById(k);
                        for (int i = 0; i < (lllevel).getChildCount(); i++) {//Внутри уровня
                            if (lllevel.getChildAt(i) instanceof LinearLayout) {
                                ll = (LinearLayout) lllevel.getChildAt(i);
                                for (int j = 0; j < ll.getChildCount(); j++) {//Внутри ЛЛ критерия
                                    if (ll.getChildAt(j) instanceof TextView) {
                                        str = ((TextView) ll.getChildAt(j)).getText().toString();
                                        str = str.substring(str.lastIndexOf("_")+1);
 
                                        if (str.equals(ar.get(position))) {
                                            lllevel.removeView(ll);
                                            if ((lllevel.getChildCount()) == 1) {
                                                layvar.removeView(lllevel);
                                            }
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        ar.remove(positionToRemove);
                        setListViewHeightBasedOnChildren(lv);
                        ad.notifyDataSetChanged();
                    }
                });
                adb.show();
            }
        });
 
        laycontainer.addView(tv);
        laycontainer.addView(laysub);
        laysub.addView(et);
        laysub.addView(ibut);
        laycontainer.addView(lv, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        setListViewHeightBasedOnChildren(lv);
        layout.addView(laycontainer);
 
    }

Поскольку ListView конфликт с ScrollView'ом, методом гугления была найдена следующая функция, которая раскрывает полностью список)
Функция для "развертывания" списка⇓
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }
 
        int totalHeight = 0;
        int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.AT_MOST);
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
            totalHeight += listItem.getMeasuredHeight();
        }
 
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }

И при самостоятельном заполнении элементов все работает нормально,но при считывании из файла, которое представляет из себя последовательный вызов все того же рекурсивного генератора с необходимыми параметрами, мистическим (возможно и вполне очевидным, но я последние несколько недель нахожусь совершенно в неадекватном состоянии и не вижу явных на то причин) образом появляется пустое пространство (не пустые элементы, а именно пустое пространство).
Сами данные сохраняются в *.txt файл (не было времени гуглить про типизированные) с добавлением ключевых слов (для перехода на следующий уровень или на следующую группу дочерних элементов) и разделяется это все символом "_".
Ответ: (Не влезло))Открытие файла⇓
Кликните здесь для просмотра всего текста
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
    void displayFiles() {
        ArrayList<String> lst = new ArrayList<String>();
        final String folder = Environment.getExternalStorageDirectory().toString();
        String sdState = android.os.Environment.getExternalStorageState(); //Получаем состояние SD карты (подключена она или нет) - возвращается true и false соответственно
        if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) { // если true
            File f1 = new File(folder + "/SPPR"); //Создаем файловую переменную
            if (!f1.exists()) { //Если папка не существует
                f1.mkdirs();
            }  //создаем её
        }
 
        File f1 = new File(folder + "/SPPR");
        File[] filesArray = f1.listFiles();
        int k = 0;
 
        //for (File f: filesArray) {
        for (int i = 0; i < filesArray.length; i++) {
            lst.add(filesArray[i].getName().replace(".txt", ""));
           // Log.d("list", lst.get(i).toString());
        }
 
        String[] myArray = {}; // конвертируем ArrayList в массив
        myArray = lst.toArray(new String[lst.size()]);
 
        final String[] list = myArray;
 
        if (list.length > 0) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Выберите ситуацию"); // заголовок для диалога
            builder.setItems(list, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int item) {
                    Toast.makeText(getApplicationContext(), "Выбранна ситуация: " + list[item], Toast.LENGTH_SHORT).show();
                    EditText ed_name = (EditText) findViewById(R.id.ed_ir_name);
                    ListView lv_al = (ListView) findViewById(R.id.lv_alter);
                    ListView lv_var = (ListView) findViewById(R.id.lv_var);
 
                    File file = new File(folder + "/SPPR/" + list[item] + ".txt");
                    try {
                        file.createNewFile();
 
                        FileReader fRd = new FileReader(file);
                        BufferedReader reader = new BufferedReader(fRd);
                        String str;
                        StringBuffer buffer = new StringBuffer();
 
                        while ((str = reader.readLine()) != null) {
                            buffer.append(str + "\n");
                        }
                        fRd.close();
 
                        String[] arr = buffer.toString().split("_");
 
                        for (int i=0;i<arr.length;i++){
                            if ((arr[i].equals("_"))||(arr[i].equals(""))){
                                arr = ArrayUtils.removeElement(arr, arr[i]);
                            }
                        }
 
                        int k = 0;
 
                        for (int i = 0; i < arr.length; i++) {
                            if (arr[i].equals("next")) {
                                k = i;
                               // Log.d("ARR", arr[i]);
                              //  Log.d("k", String.valueOf(k));
                                break;
                            }
                        }
 
                        int k1 = 0;
                        for (int i = k+1; i < arr.length; i++) {
                            if (arr[i].equals("lvl")) {
                                k1 = i;
                                break;
                            }
                        }
 
                        String[] st_ar_var = new String[k1-(k+1)];
                        String[] st_ar_al = new String[k];
                       // Log.d("lng", String.valueOf((arr.length - k)));
                        ar_al.clear();
                        ar_var.clear();
 
                        System.arraycopy(arr, k + 1, st_ar_var, 0, st_ar_var.length);
                        System.arraycopy(arr, 0, st_ar_al, 0, k);
 
                        for (int i = 0; i < st_ar_al.length; i++) {
                            ar_al.add(i, st_ar_al[i]);
                           // Log.d("ar_al", ar_al.get(i));
                           // Log.d("st_ar_al", st_ar_al[i]);
                        }
 
                        ImageButton ibut = (ImageButton) findViewById(R.id.but_var);
                        EditText et = (EditText) findViewById(R.id.ed_var);
                        //TextView tv = (TextView) findViewById(R.id.tv_null);
                        for (int i = 0; i < st_ar_var.length; i++) {
                            et.setText(st_ar_var[i]);
                            ibut.performClick();
                        }
 
                        setListViewHeightBasedOnChildren(lv_al);
                        setListViewHeightBasedOnChildren(lv_var);
 
                        ed_name.setText(list[item]);
 
                        int i = k1;
                        int ki = 0;
                        int itv = 0;
                        int iib = 0;
                        int iet = 0;
                        boolean boo = false;
 
                        LinearLayout laylevel,laycontainer;
                        TextView tv;
                        ListView lv;
 
                        laylevel = (LinearLayout) findViewById(arrId[ki]);
                        laycontainer = (LinearLayout) findViewById(arrId[ki]);
                        tv = (TextView) findViewById(R.id.tv_null);
                        lv = (ListView) findViewById(R.id.lv_var);
                        RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl_null);
 
                        do {
                            if (arr[i].equals("lvl")){
                                ki++;
                                laylevel = (LinearLayout) findViewById(arrId[ki]);
                                i += 1;
                            }else
                            if (arr[i].equals("next")){
                                boo = false;
                                for (int j=0;j<laylevel.getChildCount();j++){
                                    if (boo)
                                        break;
                                    if (laylevel.getChildAt(j) instanceof LinearLayout){
                                        laycontainer = (LinearLayout) laylevel.getChildAt(j);
                                        for (int ii=0;ii<laycontainer.getChildCount();ii++){
                                            if (laycontainer.getChildAt(ii) instanceof TextView)
                                                itv = ii;
                                            else
                                            if (laycontainer.getChildAt(ii) instanceof ListView)
                                                lv = (ListView) laycontainer.getChildAt(ii);
                                            if (laycontainer.getChildAt(ii) instanceof RelativeLayout){
                                                rl = (RelativeLayout) laycontainer.getChildAt(ii);
                                                for (int o=0;o<rl.getChildCount();o++){
                                                    if (rl.getChildAt(o) instanceof ImageButton)
                                                        iib = o;
                                                    else
                                                    if (rl.getChildAt(o) instanceof EditText)
                                                        iet = o;
                                                }
                                            }
                                            if (ii+1 == laycontainer.getChildCount()) {
                                                tv = (TextView) laycontainer.getChildAt(itv);
                                                ibut = (ImageButton) rl.getChildAt(iib);
                                                et = (EditText) rl.getChildAt(iet);
 
                                                String str_tv = tv.getText().toString();
                                                str_tv = str_tv.substring(str_tv.lastIndexOf("_") + 1);
                                                if (str_tv.equals(arr[i+1])){
                                                    boo = true;
                                                    i += 2;
                                                    break;
                                                }
                                            }
 
                                        }
                                    }
                                }
                            }
                            else{
                                et.setText(arr[i]);
                                ibut.performClick();
 
                                i++;
                            }
                        }while (i<arr.length-1);//В конце пробел почему-то
                    } catch (IOException e) {
                        Toast.makeText(getApplicationContext(), "Exception: " + e.toString(), Toast.LENGTH_LONG).show();
                    }
                }
            });
            builder.setCancelable(false);
            builder.show();
        } else {
            Toast.makeText(getApplicationContext(), "Вы еще не создавали шаблоны ситуаций", Toast.LENGTH_SHORT).show();
        }
    }
Вопрос: Listview в listview

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

список1listview)
1)100
2)200
3)300
итог=сумма 600 (textview)

список2: (listview)
1)100
2)500
3)100
итог=сумма 700 (textview)
итд


суть в чем, пытался через свой адаптер в listview засунуть listview и textedit и че то без результата не могу понять в чем дело!?


Код

public class MyAdapter extends BaseAdapter {
 
    Context ctx;
    ArrayList<DataClass> obj;
    LayoutInflater layoutInflater;
 
    MyAdapter(Context context, ArrayList<DataClass> data)
    {
        ctx=context;
        obj=data;
        layoutInflater=(LayoutInflater) ctx.getSystemService(LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public int getCount() {
        return obj.size();
    }
 
    @Override
    public Object getItem(int position) {
        return obj.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=layoutInflater.inflate(layout.items_lv,parent,false);
        DataClass obj_buf= (DataClass) getItem(position);
 
        ListView listView=(ListView) view.findViewById(id.items_lv);
 
        ArrayAdapter<String> adapter;
        String[] data = {"293,1237,1293,212"};
        adapter = new ArrayAdapter<String>(ctx, android.R.layout.simple_list_item_1,data);
        listView.setAdapter(adapter);
 
        return view;
    }
}
 
//----------------------------------------------------------------------------------
package com.avakyana.wft.lvinlv;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    String[][] dataArr ={{"150","300","450","600","750","900",},
                         {"200","400","600","800","1000","800",},
                         {"250","500","750","1000","750","500",},
                         {"300","600","900","600","300","600",},
                         {"350","700","1050","700","350","700",}};
//Constants-----------------------------------------------------------
   public static final String STR_ATTR_MONTH="month";
   public static final String STR_ATTR_PRICE="price";
   public static final String STR_ATTR_OTHER="other";
   public static final String STR_ATTR_LIST="list";
//Components----------------------------------------------------------
    Button main_btm_Start;
    ListView main_LV,items_LV;
 
//Other variable------------------------------------------------------
 
 
   
    public MainActivity() {
 
    }
 
    //--------------------------------------------------------
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        main_btm_Start=(Button)findViewById(R.id.main_btm_Start);
        main_LV=(ListView) findViewById(R.id.main_LV);
        items_LV=(ListView) findViewById(R.id.items_lv);
        main_btm_Start.setOnClickListener(this);
    }
 
 
 
    @Override
    public void onClick(View v) {
        if (v.getId()== R.id.main_btm_Start)
        {
      final  ArrayList<DataClass> obj = new ArrayList<DataClass>();
            DataClass one=null;
 
            for (int i=0;i>dataArr.length-1;i++)
            {
                one=new DataClass(dataArr[i]);
                obj.add(one);
            }
 
 
            MyAdapter adapter = new MyAdapter(this, obj);
            main_LV.setAdapter(adapter);
        }
    }
 
}
//--------------------------------------------------------------------------------------------
 
package com.avakyana.wft.lvinlv;
 
/**
 * Created by Admin on 21.05.2017.
 */
 
public class DataClass {
    String arr[];
    int result_sum=0;
 
    DataClass(String array[])
    {
        arr=array;
    }
 
    public int get_summ()
    {
        if (arr.length !=0)
        {   result_sum=0;
            for (int i=0;i>arr.length-1;i++)
                result_sum+=Integer.parseInt(arr[i]);
        }
 
        return result_sum;
    }
}


Вот как то так...все что смог придумать..
в инете ничего толком не нашел.
помогите чем смогите....
заранее всем спасибо
Ответ:
Привет, Костолом!

1. Listview в listview запихивать не стоит. Внешний listiew прокручивается, внутренний тоже - кого из них скроллить в первую очередь?

2. Как кривое решение - можете взять обычный TextView, запихнув его в ScrollView, и все пункты и суммы прямо в нем и писать.

3. Как красивое решение - создать объекты такой иерархии:
Код

ParentItem
   |--- DataItem
   |--- ResultItem


Адаптер хранит List с ParentItem'ами, а в методе getView() Вы выдаете необходимый View в зависимости от клаcса полученного объекта (проверяете через instanceof, например).
Вопрос: Траблы с ListView

Всем привет, подскажите в чем может быть дело. Инициализирую ListView.
Приложение при запуске падает и все.

Вот MainActivity
Java(TM) 2 Platform Standard Edition 5.0
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
package com.example.listview;
 
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class MainActivity extends ListActivity {
 
    // набор данных, которые свяжем ос списком
    String[] countries = { "Бразилия", "Аргентина", "Колумбия", "Чили", "Уругвай"};
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.activity_main);
 
        // получаем элемент ListView
        ListView countriesList = (ListView) findViewById(R.id.countriesList);
 
        // создаем адаптер
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
                android.R.layout.simple_list_item_1, countries);
 
        // устанавливаем для списка адаптер
        countriesList.setAdapter(adapter);
    }
}
activity_main.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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">
 
    <ListView
        android:id="@+id/countriesList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>
 
</LinearLayout>
Все вроде бы тривиально, но приложение падает.

Еще делал вот так,
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// получаем экземпляр элемента ListView
ListView listView = (ListView)findViewById(R.id.listView1);
 
// определяем массив типа String
final String[] catnames = new String[] {
    "Рыжик", "Барсик", "Мурзик", "Мурка", "Васька",
    "Томасина", "Кристина", "Пушок", "Дымка", "Кузя",
    "Китти", "Масяня", "Симба"          
  };
 
// используем адаптер данных
ArrayAdapter<String> adapter = new ArrayAdapter[B]<String>[/B](this,    android.R.layout.simple_list_item_1, catnames);
 
listView.setAdapter(adapter);
<String> подсвечивается серым.
а .setAdapter(adapter);вообще Cannot
Ответ: Спасибо помогло.
Вопрос: Убрать скролл в ListView

Пишу форму для настольной игры. На форме несколько списков ListView, каждый из которых скрывается по кнопке. Всё это находится в ScrollView. Я ожидал, что списки будут видны полностью, высотой будут по размеру контента и прокручиваться вместе со всей страницей от ScrollView, но оказалось, что у списка показывается только 1 элемент, остальное нужно прокручивать скроллом от ListView. И если на больших экранах он хотя бы нормально скроллится, то на маленьких, когда работает скролл от ScrollView, список прокручивается только колёсиком мыши. Возможно ли убрать скролл со списков и показывать их полностью?
Код формы:
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
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?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">
 
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scrollView2"
        android:layout_gravity="center_horizontal" >
 
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
 
            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
 
                <Button
                    style="?android:attr/buttonStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text=">"
                    android:id="@+id/btn_shares_open"
                    android:onClick="onOpenSharesBtnClick" />
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="Акции"
                    android:id="@+id/textView12"
                    android:layout_weight="1" />
 
                <Button
                    style="?android:attr/buttonStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="+"
                    android:id="@+id/btn_shares_add" />
            </LinearLayout>
 
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/layout_shares"
                android:visibility="visible">
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="Название | Количество | Цена | Стоимость"
                    android:id="@+id/textView13"
                    android:layout_gravity="center_horizontal" />
 
                <ListView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/lv_shares" />
            </LinearLayout>
 
            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >
 
                <Button
                    style="?android:attr/buttonStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text=">"
                    android:id="@+id/btn_houses_open"
                    android:onClick="onOpenHousesBtnClick" />
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="Дома"
                    android:id="@+id/textView14"
                    android:layout_weight="1" />
 
                <Button
                    style="?android:attr/buttonStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="+"
                    android:id="@+id/btn_houses_add"
                    android:onClick="onHouseAddBtnClick" />
            </LinearLayout>
 
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/layout_houses"
                android:visibility="visible">
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="Название | Цена | Оплачено | Доход"
                    android:id="@+id/textView15"
                    android:layout_gravity="center_horizontal" />
 
                <ListView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/lv_houses"
                    android:scrollIndicators="none" />
            </LinearLayout>
 
            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >
 
                <Button
                    style="?android:attr/buttonStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text=">"
                    android:id="@+id/bnt_businesses_open"
                    android:onClick="onOpenBusinessesBtnClick" />
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="Бизнесы"
                    android:id="@+id/textView2"
                    android:layout_weight="1" />
 
                <Button
                    style="?android:attr/buttonStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="+"
                    android:id="@+id/btn_businesses_add" />
            </LinearLayout>
 
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/layout_businesses"
                android:visibility="visible">
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="Название | Цена | Доход"
                    android:id="@+id/textView16"
                    android:layout_gravity="center_horizontal" />
 
                <ListView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/lv_businesses" />
            </LinearLayout>
 
        </LinearLayout>
    </ScrollView>
 
</LinearLayout>
Ответ: MaFa23, да
Вопрос: Не отображается ListView

Код Java(TM) 2 Platform Standard Edition 5.0
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
public class ListViewActivity extends Activity {
 
    private static final String TAG = "Vkfunc";
    SharedPreferences mSettings;
    Context context;
    VkWebViewClient vk;
    public ArrayList<String> vkmass;
    public static final String APP_PREFERENCES = "mysettings";
    public ArrayAdapter<String> adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.d("Vkfunc", "здесь в активити");
        context = getApplication();
        ListView listView = (ListView) findViewById(R.id.listView1);
       // vk = new VkWebViewClient(context);
        //final ArrayAdapter<String> adapter;
        //adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,vk.vkmass);
        listView.setAdapter(adapter);
    }
 
    public class VkPostTask extends AsyncTask<Void, Void, Void> {
 
        // Postvk vk;
        // Context context;
 
 
        public VkPostTask(Context context){
            // this.context = context;
 
            // vk = new Postvk(this.context);
        }
 
        @Override
        protected Void doInBackground(Void... params) {
 
 
            //vk.postvk();
            Log.d(TAG, "здесь");
 
            mSettings = context.getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
            String savedText = mSettings.getString("Access_token", "");
            String savedText1 = mSettings.getString("User_id", "");
 
            if(savedText == "" || savedText1 == "")
            {
                Log.d("Vkfunc", "Еще пусто");
            }
 
 
 
            Log.d(TAG, savedText);
 
            String mess = "HelloPostEto";
 
            Log.d(TAG, savedText1);
 
            String oid = "60374011";
 
            String urls = "https://api.vk.com/method/"+
                    "messages.get?"+
                    "uid="+ savedText1+
 
                    "&access_token="+savedText
                    ;
 
            /*String urls = "https://api.vk.com/method/"+
                    "messages.getHistory?"+
                    "user_id="+ oid+
                    "&offset="+ "1"+
                    "&count="+ "5"+
                    "&access_token="+savedText;*/
 
            Log.d(TAG, "здесь");
 
 
            HttpClient client = new DefaultHttpClient();
 
//            Log.d(TAG, access);
            HttpPost request = new HttpPost(urls);
 
            // Log.d(TAG, access);
 
            try {
 
                HttpResponse response = client.execute(request);
                Log.d(TAG, "Запрос");
 
 
 
                HttpEntity entity = response.getEntity();
                Log.d(TAG, "Запрос");
                String responseText = EntityUtils.toString(entity);
 
                Log.d(TAG, responseText);
 
                //parse response for error code or not
                // errorFlag = parseResponse(responseText);
                vkmass = new ArrayList<String>();
                //Log.d(Constants.DEBUG_TAG,"response text="+responseText);
                JSONObject object = new JSONObject(responseText);
                JSONArray array = object.getJSONArray("response");
                for (int i = 1; i < array.length(); i++)
                {
                    JSONObject obj=array.getJSONObject(i);
                    String str2=obj.getString("body");
                    String str3 = obj.getString("uid");
                    Log.d(TAG, str2);
                    Log.d(TAG, str3);
                    vkmass.add(str3);
                    vkmass.add(str2);
                    int size = vkmass.size();
                    // Log.d("Size: ", "The size "+size);
 
 
                }
 
 
            }
 
 
            catch(ClientProtocolException cexc){
                cexc.printStackTrace();
            }
            catch(IOException ioex){
                ioex.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
        }
 
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
 
 
            adapter = new ArrayAdapter<String>(ListViewActivity.this,android.R.layout.simple_list_item_1,vk.vkmass);
            ListView listView = (ListView) findViewById(R.id.listView1);
            //listView.setAdapter(adapter);
 
        }
 
 
    }
}
В onPostExecute привязываю адаптер к listview,ошибок не выдает, но активити открывается пустым почему такое происходит??

Добавлено через 2 минуты
как правильно заполнить listview??

Добавлено через 26 минут
new VkPostTask(context).execute(); добавил в onCreate но возникает ошибка
Код Java(TM) 2 Platform Standard Edition 5.0
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
здесь ошибка public class VkPostTask extends AsyncTask<Void, Void, Void> {
 
        // Postvk vk;
        // Context context;
 
 
        public VkPostTask(Context context){
            // this.context = context;
 
            // vk = new Postvk(this.context);
        }
 
        @Override
        protected Void doInBackground(Void... params) {
 
 
            //vk.postvk();
            Log.d(TAG, "здесь");
 
            mSettings = context.getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
            String savedText = mSettings.getString("Access_token", "");
            String savedText1 = mSettings.getString("User_id", "");
 
            if(savedText == "" || savedText1 == "")
            {
                Log.d("Vkfunc", "Еще пусто");
            }
 
 
 
            Log.d(TAG, savedText);
 
            String mess = "HelloPostEto";
 
            Log.d(TAG, savedText1);
 
            String oid = "60374011";
 
            String urls = "https://api.vk.com/method/"+
                    "messages.get?"+
                    "uid="+ savedText1+
 
                    "&access_token="+savedText
                    ;
 
            /*String urls = "https://api.vk.com/method/"+
                    "messages.getHistory?"+
                    "user_id="+ oid+
                    "&offset="+ "1"+
                    "&count="+ "5"+
                    "&access_token="+savedText;*/
 
            Log.d(TAG, "здесь");
 
 
            HttpClient client = new DefaultHttpClient();
 
//            Log.d(TAG, access);
            HttpPost request = new HttpPost(urls);
 
            // Log.d(TAG, access);
 
            try {
 
                HttpResponse response = client.execute(request);
                Log.d(TAG, "Запрос");
 
 
 
                HttpEntity entity = response.getEntity();
                Log.d(TAG, "Запрос");
                String responseText = EntityUtils.toString(entity);
 
                Log.d(TAG, responseText);
 
                //parse response for error code or not
                // errorFlag = parseResponse(responseText);
                vkmass = new ArrayList<String>();
                //Log.d(Constants.DEBUG_TAG,"response text="+responseText);
                JSONObject object = new JSONObject(responseText);
                JSONArray array = object.getJSONArray("response");
                for (int i = 1; i < array.length(); i++)
                {
                    JSONObject obj=array.getJSONObject(i);
                    String str2=obj.getString("body");
                    String str3 = obj.getString("uid");
                    Log.d(TAG, str2);
                    Log.d(TAG, str3);
                    vkmass.add(str3);
                    vkmass.add(str2);
                    int size = vkmass.size();
                    // Log.d("Size: ", "The size "+size);
 
 
                }
 
 
            }
 
 
            catch(ClientProtocolException cexc){
                cexc.printStackTrace();
            }
            catch(IOException ioex){
                ioex.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
        }
 
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
 
 
            adapter = new ArrayAdapter<String>(ListViewActivity.this,android.R.layout.simple_list_item_1,vk.vkmass);здесь ошибка
            ListView listView = (ListView) findViewById(R.id.listView1);
            //listView.setAdapter(adapter);
 
        }
 
 
    }
Log com.examplemydetobj.vkpost E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException

В чем ошибка и как ее исправить чтобы все загружалось в listview??

Добавлено через 6 минут
Может какие то параметры нужно передавать в AsynkTask в этом случае?? Подскажите как исправить код??

Добавлено через 1 час 39 минут
исправил ошибки нет но на экране ничего не отображается почему?? Как исправить чтобы listview отображался??
Ответ: извините я уже понял свою ошибку на счет этого и ошибку в коде. там нужно было после инициализации адаптера второй раз его установить в listview. Не подскажите какой есть метод как можно получить текст который содержится в конкретном пункте listview ??
Вопрос: Высота строк ListView

У меня ListView выводит текст гигантского размера. Я выяснил, как изменить размер текста:


Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
SimpleCursorAdapter scAdapter = new SimpleCursorAdapter(this,
    android.R.layout.simple_list_item_1, cursor, from, to) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        if (view instanceof TextView) {
            ((TextView) view).setTextSize(12);
            // ((TextView) view).setLineSpacing(-30, 1f);
        }
        return view;
    }
};
Но при этом высота строк не уменьшается. Т.е. высокие строки и мелкий текст.
Вроде бы можно изменить высоту строк с помощью setLineSpacing() (8-я закомментаренная строка), но не помогает.
Не подскажете ли как изменить высоту строк в ListView?
Ответ: - тут описано как изменить стиль ListView
Вопрос: TabHost, Activity, кнопка обновить на MainActivity

Здравствуйте!
Надеюсь вы мне поможете!
Структура программы:
MainActivity, сверху заголовок программы, два Item-а основного меню (обновить, настройки), TabHost.
При запуске в Tabhost создаются 2 вкладки и привязываются 2 класса как содержимое вкладок.
На первой кладке Listview (до второй еще не дошел), при создании вкладки Listview заполняется.
Заполняется через AsyncTask (запрос на сайт, парсинг JSON)...

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

Т.е. у меня не получается обратиться к ListView-у из MainActivity (на нем расположена кнопка "Обновить" в main_menu), который расположен в другом activity на вкладке TabHost.

Возможно я изначально не правильно сделал архитектуру приложения. Конечно я могу сделать кнопку "обновить" для каждой вкладки по отдельности, но мне кажется это будет не красиво.

Подскажите правильный путь...

Вот MainActivity:

Код

package com.example.user.myapplication;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray;

import android.app.LocalActivityManager;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;

import java.io.InputStream;
import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends AppCompatActivity {

    public static String LOG_TAG = "my_log";
    private ArrayList<HashMap<String, Object>> mCatList;
    private static final String TITLE = "catname"; // Верхний текст
    private static final String DESCRIPTION = "description"; // ниже главного
    private static final String ICON = "icon";  // будущая картинка

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);





        TabHost tabHost = (TabHost) findViewById(R.id.tabHost);
        Log.d(LOG_TAG, "Setup");

        LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false);
        //setup(mLocalActivityManager);
        mLocalActivityManager.dispatchCreate(savedInstanceState);
        tabHost.setup(mLocalActivityManager);
        TabHost.TabSpec spec;
        Log.d(LOG_TAG, "TabSpec spec");
        spec = tabHost.newTabSpec("tag1");
        Log.d(LOG_TAG, "setContent");

        spec.setContent(new Intent(this,atmActivity.class));


        Log.d(LOG_TAG, "setIndicator");
        spec.setIndicator("TAB 1");
        Log.d(LOG_TAG, "addTab");
        tabHost.addTab(spec);

        Log.d(LOG_TAG, "TabSpec spec");
        spec = tabHost.newTabSpec("tag2");
        Log.d(LOG_TAG, "setContent");

        //spec.setContent(R.id.tab2);

        spec.setContent(new Intent(this,iptActivity.class));
        Log.d(LOG_TAG, "setIndicator");
        spec.setIndicator("TAB 2");
        Log.d(LOG_TAG, "addTab");
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);


       // new ParseTask().execute();
    }
        private class ParseTask extends AsyncTask<Void, Void, String> {

            HttpURLConnection urlConnection = null;
            BufferedReader reader = null;
            String resultJson = "";

            @Override
            protected String doInBackground(Void... params) {
                // получаем данные с внешнего ресурса
                try {
                    Log.d(LOG_TAG,"получаем данные с внешнего ресурса");
                    URL url = new URL("_Здесь URL, получаю JSON данные_");

                    urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("GET");
                    urlConnection.connect();

                    InputStream inputStream = urlConnection.getInputStream();
                    StringBuffer buffer = new StringBuffer();

                    reader = new BufferedReader(new InputStreamReader(inputStream));

                    String line;
                    while ((line = reader.readLine()) != null) {
                        buffer.append(line);
                    }
                    Log.d(LOG_TAG,"Получили данные");
                    resultJson = buffer.toString();

                } catch (Exception e) {
                    e.printStackTrace();
                }
                return resultJson;
            }

            @Override
            protected void onPostExecute(String strJson) {
                super.onPostExecute(strJson);
                // выводим целиком полученную json-строку
                Log.d(LOG_TAG, strJson);

                JSONObject dataJsonObj = null;


                try {
                    dataJsonObj = new JSONObject(strJson);
                    JSONArray atms = dataJsonObj.getJSONArray("atm");

                    ListView iptlist = (ListView) findViewById(R.id.iptlist);

                    mCatList = new ArrayList<HashMap<String, Object>>();
                    HashMap<String, Object> hm;



                  
                    for (int i = 0; i < atms.length(); i++) {
                        JSONObject atm = atms.getJSONObject(i);

                        hm = new HashMap<>();
                        hm.put(TITLE, atm.getString("ATMID")+" "+atm.getString("Name")); // Название
                        hm.put(DESCRIPTION, atm.getString("datet")); // Описание

                        if (atm.getString("Status").equals("1")) {
                            hm.put(ICON, R.drawable.circle_green);}
                        else
                        {hm.put(ICON, R.drawable.circle_red);}// Картинка

                        mCatList.add(hm);

                        String Atmid = atm.getString("ATMID");
                        String Atmname = atm.getString("Name");
                        String Status = atm.getString("Status");
                        String Datet = atm.getString("datet");

                        Log.d(LOG_TAG, "atmid: " + Atmid);
                        Log.d(LOG_TAG, "atmname: " + Atmname);
                        Log.d(LOG_TAG, "Status: " + Status);
                        Log.d(LOG_TAG, "Datet: " + Datet);
                    }


                    Log.d(LOG_TAG, "SimpleAdapter");
                    SimpleAdapter adapter = new SimpleAdapter(
                            MainActivity.this,
                            mCatList,
                            R.layout.list_item,
                            new String[]{TITLE, DESCRIPTION, ICON},
                            new int[]{R.id.text1, R.id.text2, R.id.img});
                    iptlist.setAdapter(adapter);


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }


    public void sayHello(View V) throws JSONException {
        Log.d(LOG_TAG,"Пробуем заполнить ListView");



    }

    public void showname(View V) {

        Toast.makeText(getApplicationContext(),
                "", Toast.LENGTH_LONG).show();

    }
    public void showpr(View V) throws JSONException {

    }





 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
     getMenuInflater().inflate(R.menu.menu_main, menu);
     return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item1: {
                //Кнопка обновления
                Log.d(LOG_TAG,"Кнопка обновления");
                


ВОТ ТУТ не могу получить ListView, который находится на atmActivity
                





            }
                return true;

            case R.id.item2:
                Toast.makeText(getApplicationContext(),
                        "", Toast.LENGTH_LONG).show();
                return true;
        }


        return super.onOptionsItemSelected(item);
    }
}



 

Заранее спасибо!

Ответ:
Здравствуйте!
Надеюсь вы мне поможете!
Структура программы:
MainActivity, сверху заголовок программы, два Item-а основного меню (обновить, настройки), TabHost.
При запуске в Tabhost создаются 2 вкладки и привязываются 2 класса как содержимое вкладок.
На первой кладке Listview (до второй еще не дошел), при создании вкладки Listview заполняется.
Заполняется через AsyncTask (запрос на сайт, парсинг JSON)...

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

Т.е. у меня не получается обратиться к ListView-у из MainActivity (на нем расположена кнопка "Обновить" в main_menu), который расположен в другом activity на вкладке TabHost.

Возможно я изначально не правильно сделал архитектуру приложения. Конечно я могу сделать кнопку "обновить" для каждой вкладки по отдельности, но мне кажется это будет не красиво.

Подскажите правильный путь...

Вот MainActivity:

Код

package com.example.user.myapplication;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray;

import android.app.LocalActivityManager;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;

import java.io.InputStream;
import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends AppCompatActivity {

    public static String LOG_TAG = "my_log";
    private ArrayList<HashMap<String, Object>> mCatList;
    private static final String TITLE = "catname"; // Верхний текст
    private static final String DESCRIPTION = "description"; // ниже главного
    private static final String ICON = "icon";  // будущая картинка

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);





        TabHost tabHost = (TabHost) findViewById(R.id.tabHost);
        Log.d(LOG_TAG, "Setup");

        LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false);
        //setup(mLocalActivityManager);
        mLocalActivityManager.dispatchCreate(savedInstanceState);
        tabHost.setup(mLocalActivityManager);
        TabHost.TabSpec spec;
        Log.d(LOG_TAG, "TabSpec spec");
        spec = tabHost.newTabSpec("tag1");
        Log.d(LOG_TAG, "setContent");

        spec.setContent(new Intent(this,atmActivity.class));


        Log.d(LOG_TAG, "setIndicator");
        spec.setIndicator("TAB 1");
        Log.d(LOG_TAG, "addTab");
        tabHost.addTab(spec);

        Log.d(LOG_TAG, "TabSpec spec");
        spec = tabHost.newTabSpec("tag2");
        Log.d(LOG_TAG, "setContent");

        //spec.setContent(R.id.tab2);

        spec.setContent(new Intent(this,iptActivity.class));
        Log.d(LOG_TAG, "setIndicator");
        spec.setIndicator("TAB 2");
        Log.d(LOG_TAG, "addTab");
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);


       // new ParseTask().execute();
    }
        private class ParseTask extends AsyncTask<Void, Void, String> {

            HttpURLConnection urlConnection = null;
            BufferedReader reader = null;
            String resultJson = "";

            @Override
            protected String doInBackground(Void... params) {
                // получаем данные с внешнего ресурса
                try {
                    Log.d(LOG_TAG,"получаем данные с внешнего ресурса");
                    URL url = new URL("_Здесь URL, получаю JSON данные_");

                    urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("GET");
                    urlConnection.connect();

                    InputStream inputStream = urlConnection.getInputStream();
                    StringBuffer buffer = new StringBuffer();

                    reader = new BufferedReader(new InputStreamReader(inputStream));

                    String line;
                    while ((line = reader.readLine()) != null) {
                        buffer.append(line);
                    }
                    Log.d(LOG_TAG,"Получили данные");
                    resultJson = buffer.toString();

                } catch (Exception e) {
                    e.printStackTrace();
                }
                return resultJson;
            }

            @Override
            protected void onPostExecute(String strJson) {
                super.onPostExecute(strJson);
                // выводим целиком полученную json-строку
                Log.d(LOG_TAG, strJson);

                JSONObject dataJsonObj = null;


                try {
                    dataJsonObj = new JSONObject(strJson);
                    JSONArray atms = dataJsonObj.getJSONArray("atm");

                    ListView iptlist = (ListView) findViewById(R.id.iptlist);

                    mCatList = new ArrayList<HashMap<String, Object>>();
                    HashMap<String, Object> hm;



                  
                    for (int i = 0; i < atms.length(); i++) {
                        JSONObject atm = atms.getJSONObject(i);

                        hm = new HashMap<>();
                        hm.put(TITLE, atm.getString("ATMID")+" "+atm.getString("Name")); // Название
                        hm.put(DESCRIPTION, atm.getString("datet")); // Описание

                        if (atm.getString("Status").equals("1")) {
                            hm.put(ICON, R.drawable.circle_green);}
                        else
                        {hm.put(ICON, R.drawable.circle_red);}// Картинка

                        mCatList.add(hm);

                        String Atmid = atm.getString("ATMID");
                        String Atmname = atm.getString("Name");
                        String Status = atm.getString("Status");
                        String Datet = atm.getString("datet");

                        Log.d(LOG_TAG, "atmid: " + Atmid);
                        Log.d(LOG_TAG, "atmname: " + Atmname);
                        Log.d(LOG_TAG, "Status: " + Status);
                        Log.d(LOG_TAG, "Datet: " + Datet);
                    }


                    Log.d(LOG_TAG, "SimpleAdapter");
                    SimpleAdapter adapter = new SimpleAdapter(
                            MainActivity.this,
                            mCatList,
                            R.layout.list_item,
                            new String[]{TITLE, DESCRIPTION, ICON},
                            new int[]{R.id.text1, R.id.text2, R.id.img});
                    iptlist.setAdapter(adapter);


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }


    public void sayHello(View V) throws JSONException {
        Log.d(LOG_TAG,"Пробуем заполнить ListView");



    }

    public void showname(View V) {

        Toast.makeText(getApplicationContext(),
                "", Toast.LENGTH_LONG).show();

    }
    public void showpr(View V) throws JSONException {

    }





 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
     getMenuInflater().inflate(R.menu.menu_main, menu);
     return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item1: {
                //Кнопка обновления
                Log.d(LOG_TAG,"Кнопка обновления");
                


ВОТ ТУТ не могу получить ListView, который находится на atmActivity
                





            }
                return true;

            case R.id.item2:
                Toast.makeText(getApplicationContext(),
                        "", Toast.LENGTH_LONG).show();
                return true;
        }


        return super.onOptionsItemSelected(item);
    }
}



 

Заранее спасибо!

Вопрос: Переход из Listview в Listview

Как сделать, что бы когда нажимаешь в главном листвью на кнопку, открывалось новое нужное(т.е. то по которому тапнули) активити с другим списком(листвью)?
Попробывал сделать так, но не работает.

Java(TM) 2 Platform Standard Edition 5.0
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
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
@SuppressLint("UseValueOf")
public class MainActivity extends Activity {
    
    ListView lvMainlist;
    String[] stmainlist;
    
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    lvMainlist = (ListView) findViewById(R.id.lvMainlist);
 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.stmainlist,
            android.R.layout.simple_list_item_1);
    lvMainlist.setAdapter(adapter);
 
    lvMainlist.setOnItemClickListener(new OnItemClickListener()
    {
 
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
    
            
            Intent intent = null;
            switch (Integer.parseInt(view.getTag().toString()))
            {
            case 0:
                intent = new Intent(getBaseContext(), FirstActivity.class);break;
            case 1:
                intent = new Intent(getBaseContext(), SecondActivity.class);break;
                        case 2:
                intent = new Intent(getBaseContext(), ThirdActivity.class);break;
            }
            
    startActivity(intent);
        }
 
    });
  }
}
Ответ: Здрасте, каким образом можно в зависимости от условия из нескольких массивов, выбрав оди вставить в адаптер.
ListView listView = (ListView) findViewById(R.id.listView);

listView.setAdapter(
new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, head_array));
listView.setTextFilterEnabled(true);
Вопрос: Глючит ListView

Получаю данные с сервера)
отображаю через ListView проблем нет. Но по нажатию по item listview хочу показать скрытое textview внутри item,
вроде бы просто, но дико глючит. По нажатию открывает не только скрытый textview в текущем item, но еще и другие почему равно через каждые 6 штук?

Скажите в чем может быть проблема?

Такк формируется вывод новости, при этом body - скрыто
Код 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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/rl"
        android:padding="20dp">
 
        <!-- Image -->
        <com.android.volley.toolbox.NetworkImageView
            android:id="@+id/thumbnail"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_alignParentLeft="true"
            android:layout_marginRight="8dp"
            android:background="@drawable/news_image_border" />
 
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_centerVertical="true">
 
            <!-- Title -->
            <TextView
                android:layout_marginLeft="100dp"
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15dp"
                android:textStyle="bold"
                android:textColor="@color/actionBar_backround"/>
 
            <!-- Date -->
            <TextView
                android:layout_marginLeft="100dp"
                android:id="@+id/date"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/title"
                android:layout_marginTop="1dip"
                android:textSize="14dp" />
 
            </RelativeLayout>
 
        </RelativeLayout>
 
    <!-- Body -->
    <TextView
        android:id="@+id/body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/rl"
        android:textColor="#000"
        android:textSize="16dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingBottom="20dp"
        android:visibility="gone" />
 
</RelativeLayout>
Код фрагмента: в котором происходит загрузка данных с сайта и отображение. А так идет клик по listitem, после которого открывается body не только в текущем Item но и в других(((

Код Java(TM) 2 Platform Standard Edition 5.0
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package ru.animalface.app;
 
import android.app.Fragment;
import android.app.ProgressDialog;
import android.os.Bundle;
 
import android.text.Layout;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
 
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;
 
import ru.animalface.app.adapter.VolleyListNewsAdapter;
import ru.animalface.app.model.News;
 
 
public class NewsFragment extends Fragment {
 
    private static List<News> newsList = new ArrayList<News>();
    private static ListView listView;
    private static VolleyListNewsAdapter volleyAdapter;
    private static Integer currentPage;
    private static Boolean loading;
    private static View rootView;
    // Progress
    private ProgressDialog pDialog;
 
    public NewsFragment(){}
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 
            rootView = inflater.inflate(R.layout.fragment_news, container, false);
 
            pDialog = ProgressDialog.show(getActivity(), null, getResources().getString(R.string.loading), true);
            loading = true;
            currentPage = 0;
 
            listView = (ListView) rootView.findViewById(R.id.list_news);
            newsList = new ArrayList<News>();
            volleyAdapter = new VolleyListNewsAdapter(getActivity(), newsList);
            listView.setAdapter(volleyAdapter);
 
            RequestQueue queue = Volley.newRequestQueue(getActivity());
            JsonArrayRequest newsReqest = new JsonArrayRequest("https://animalface.ru/mobile/news/", createMyReqSuccessListener(), createMyReqErrorListener());
            // Adding request to request queue
            queue.add(newsReqest);
 
            // По клику новости показываем текст
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //News n =  newsList.get(position);
 
 
 
 
 
                    //Log.v("My Project", "Позиция: " + position);
 
                   // News news = new News();
 
                    //news.setTitle(n.getTitle());
                    //news.setImage(n.getImage());
                    //news.setDate(n.getDate());
                    //news.setBody(n.getBody());
                    //news.setVisible(true);
 
                    //newsList.set(position, news);
                    //volleyAdapter.notifyDataSetChanged();
 
 
                   // volleyAdapter = new VolleyListNewsAdapter(getActivity(), newsList);
                    //listView.setAdapter(volleyAdapter);
 
                    //Log.v("My Project", "Массив: " + newsList);
 
                    TextView current = (TextView) view.findViewById(R.id.body);
                    current.setVisibility(TextView.VISIBLE);
                }
            });
 
 
            return rootView;
        }
 
    private Response.Listener<JSONArray> createMyReqSuccessListener() {
        return new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                pDialog.hide();
 
                // если есть данные то увелчиваем запрос на вывод страниц
                if (response.length() > 0) {
 
                    loading = true;
                    currentPage += 7;
 
                    for (int i = 0; i < response.length(); i++) {
                        try {
                            JSONObject obj = response.getJSONObject(i);
                            News news = new News();
                            news.setTitle(obj.getString("title"));
                            news.setImage(obj.getString("image"));
                            news.setDate(obj.getString("datePrint"));
                            news.setBody(obj.getString("body"));
                            news.setVisible(false);
                            newsList.add(news);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    volleyAdapter.notifyDataSetChanged();
 
                } else {
                    loading = false;
                }
            }
        };
    }
 
    private Response.ErrorListener createMyReqErrorListener() {
        return new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                pDialog.hide();
                Toast.makeText(getActivity(), R.string.error_connection, Toast.LENGTH_LONG).show();
            }
        };
    }
}
Класс адаптера

Код Java(TM) 2 Platform Standard Edition 5.0
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
package ru.animalface.app.adapter;
 
import ru.animalface.app.R;
import ru.animalface.app.app.AppController;
import ru.animalface.app.model.News;
 
import java.util.List;
 
import android.app.Activity;
import android.content.Context;
import android.text.Html;
import android.text.SpannableString;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.widget.BaseAdapter;
import android.widget.TextView;
 
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
 
public class VolleyListNewsAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<News> newsItems;
 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();
 
    public VolleyListNewsAdapter(Activity activity, List<News> newsItems) {
        this.activity = activity;
        this.newsItems = newsItems;
    }
 
    @Override
    public int getCount() {
        return newsItems.size();
    }
 
    @Override
    public Object getItem(int location) {
        return newsItems.get(location);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
 
        if (inflater == null)
            inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
        if (convertView == null)
            convertView = inflater.inflate(R.layout.drawer_list_news, null);
 
        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
 
        // getting news data for the row
        News n = newsItems.get(position);
        TextView body = (TextView) convertView.findViewById(R.id.body);
 
        if(n.getVisible() == false) {
 
            TextView title = (TextView) convertView.findViewById(R.id.title);
            TextView date = (TextView) convertView.findViewById(R.id.date);
            NetworkImageView thumbNail = (NetworkImageView) convertView.findViewById(R.id.thumbnail);
 
            // title
            title.setText(n.getTitle());
 
            // body
            body.setText(Html.fromHtml(n.getBody()));
 
            // date
            date.setText(n.getDate());
 
            // thumbnail image
            thumbNail.setImageUrl(n.getImage(), imageLoader);
 
        } else {
            // body
            body.setVisibility(View.VISIBLE);
        }
 
        return convertView;
    }
 
}
Класс модели

Код Java(TM) 2 Platform Standard Edition 5.0
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
package ru.animalface.app.model;
 
public class News {
    private String title, image, date, body;
    private Boolean visible;
 
    public News() {}
 
    public News(Boolean visible) {
        this.visible = visible;
    }
 
    public News(String title, String image, String date, String body, Boolean visible) {
        this.title = title;
        this.image = image;
        this.date = date;
        this.body = body;
        this.visible = visible;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getImage() {
        return image;
    }
 
    public void setImage(String image) {
        this.image = image;
    }
 
    public String getDate() {
        return date;
    }
 
    public void setDate(String date) {
        this.date = date;
    }
 
    public String getBody() {
        return body;
    }
 
    public void setBody(String body) {
        this.body = body;
    }
 
    public Boolean getVisible() {
        return visible;
    }
 
    public void setVisible(Boolean visible) {
        this.visible = visible;
    }
 
}
Ответ: Технично расписано. Надо в своем проекте также попробовать...
Вопрос: В ListView не работает OnItemClickListener

Здравствуйте,
Впервые попался на такую проблему, что в ListView не работает OnItemClickListener.
При клике на элемент списка, в будущем должен будет проводиться переход на фрагмент, где будет выведена доп. информация, но это в будущем, так как я застрял в самом начале.
В методе я просто стараюсь в логах вывести, как метод выполняется и Toast с позицией, на которую сделан клик.
Вот примеры кода.
Часть фрагмента, который работает со списком
Код Java(TM) 2 Platform Standard Edition 5.0
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
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }
 
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.i(TAG, "onCreateView");
        View view = inflater.inflate(R.layout.fragment_event_list, container, false);
        
        //swipeRefreshLayout = (SwipeRefreshLayout)view.findViewById(R.id.swiperefresh);
        
        listView = (ListView)view.findViewById(android.R.id.list);
        
        listView.setClickable(true);
        listView.setItemsCanFocus(true);
        
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Log.i(TAG, "onItemClick");
                Toast.makeText(context, position,
                        Toast.LENGTH_SHORT).show();
            }
        });
                
        return view; 
    }
 
@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Log.i(TAG, "onViewCreated");
        
        dbHelper = new DatabaseHelper(getActivity());
        try {
            dbHelper.open();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        list = dbHelper.getEvents();
        eventAdapter = new EventAdapter(list);
        setListAdapter(eventAdapter);
        
        dbHelper.close();
 
}
 
public class EventAdapter extends ArrayAdapter<Event> {
        
        public EventAdapter(ArrayList<Event> e) {
            super(getActivity(), android.R.layout.simple_list_item_1, e);
        }
        
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Log.i(TAG, "getView");
            if(convertView == null) {
                convertView = getActivity().getLayoutInflater().inflate(R.layout.event_list_item, null);
            }
            Event event = getItem(position);
            //System.out.println("Event object in getView() " + event);
            //System.out.println("Event name: " + event.getName());
            //eventImageView = (ImageView)view.findViewById(R.id.event_list_image);
            eventNameTextView = (TextView)convertView.findViewById(R.id.event_list_name);
            eventNameTextView.setText(event.getName());
            eventNameTextView.setFocusable(false);
            eventStartDateTextView = (TextView)convertView.findViewById(R.id.event_list_date);
            eventStartDateTextView.setText(event.getStartDate()); 
            eventStartDateTextView.setFocusable(false);
            
            return convertView;
        }
        
    }
Пробовал "оживить" клики по списку с помощью всяких рекомендации, которыъ искал в гугле по данной проблеме
eventNameTextView.setFocusable(false);
listView.setClickable(true);
listView.setItemsCanFocus(true);

Ничего не помогает

Вот вьюшки.
Сам список:
Код XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- <android.support.v4.widget.SwipeRefreshLayout -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:descendantFocusability="blocksDescendants" >
    <ListView 
        android:id="@android:id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
         />
</RelativeLayout> 
 
<!-- </android.support.v4.widget.SwipeRefreshLayout> -->
И его элементы:
Код 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
<?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="vertical" >
 
        <!-- <ImageView
            android:id="@+id/event_list_image"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:contentDescription="@string/app_name" /> -->
 
        <TextView
            android:id="@+id/event_list_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusableInTouchMode="false"
            android:clickable="false"
            android:focusable="false" />
 
        <TextView
            android:id="@+id/event_list_date"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clickable="false"
            android:focusable="false"
            android:focusableInTouchMode="false" />
 
</LinearLayout>
android:focusableInTouchMode="false"
android:clickable="false"
android:focusable="false"

тоже использовал ищ рекомендаций, что гугл подскозал.
Как никак, всё без успехов.

Буду благодарен за помощь.
Ответ: Спасибо, вроде помогло.