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

Как сделать массив из 37 кнопок, но не так страшно как у меня? Или же это нормальный код(думаю нет) и я зря парюсь?

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
ImageButton[] strheroes = {(ImageButton)findViewById(R.id.str1),
               (ImageButton)findViewById(R.id.str2),
               (ImageButton)findViewById(R.id.str3),
               (ImageButton)findViewById(R.id.str4),
               (ImageButton)findViewById(R.id.str5),
               (ImageButton)findViewById(R.id.str6),
               (ImageButton)findViewById(R.id.str7),
               (ImageButton)findViewById(R.id.str8),
               (ImageButton)findViewById(R.id.str9),
               (ImageButton)findViewById(R.id.str10),
               (ImageButton)findViewById(R.id.str11),
               (ImageButton)findViewById(R.id.str12),
               (ImageButton)findViewById(R.id.str13),
               (ImageButton)findViewById(R.id.str14),
               (ImageButton)findViewById(R.id.str15),
               (ImageButton)findViewById(R.id.str16),
               (ImageButton)findViewById(R.id.str17),
               (ImageButton)findViewById(R.id.str18),
               (ImageButton)findViewById(R.id.str19),
               (ImageButton)findViewById(R.id.str20),
               (ImageButton)findViewById(R.id.str21),
               (ImageButton)findViewById(R.id.str22),
               (ImageButton)findViewById(R.id.str23),
               (ImageButton)findViewById(R.id.str24),
               (ImageButton)findViewById(R.id.str25),
               (ImageButton)findViewById(R.id.str26),
               (ImageButton)findViewById(R.id.str27),
               (ImageButton)findViewById(R.id.str28),
               (ImageButton)findViewById(R.id.str29),
               (ImageButton)findViewById(R.id.str30),
               (ImageButton)findViewById(R.id.str31),
               (ImageButton)findViewById(R.id.str32),
               (ImageButton)findViewById(R.id.str33),
               (ImageButton)findViewById(R.id.str34),
               (ImageButton)findViewById(R.id.str35),
               (ImageButton)findViewById(R.id.str36),
               (ImageButton)findViewById(R.id.str37),
       };
Ответ: вопрос: зачем столько вьюх?
Вопрос: Обработчик кнопки не работает - приложение компилируется, но крашится при запуске

Всем привет!
Собственно, проблема: у меня получилось сделать udp-listener за пару вечеров - слава яйцам!
Теперь я захотел добавить туда кнопку - нужно инкриментировать значение счётчика по нажатию кнопки
(вообще хочу массив, чтобы по нажатию кнопки в массив добавлялся новый элемент с текущим содержанием текста, полученного по udp, и по нажатию второй кнопки - либо сохрнять этот массив на диск, либо отправлять на почту через 3г - смотря что проще)
делал вот по этому тюториалу

- та же фигня.
и при попытке запуска с изменённм кодом приложение компилируется ок, но крашится.
сейчас код main_activity.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
public class MainActivity extends Activity {
//    Button button;
    Button button = (Button) findViewById(R.id.button);
    Button button2;
    int counter = 0;
    TextView textViewLitres;
    TextView textViewADC;
    private String ip;
    private int port;
    static TextView tv;
    public static Handler UIHandler;
    static
    {
        UIHandler = new Handler(Looper.getMainLooper());
    }
    public static void runOnUI(Runnable runnable) {
        UIHandler.post(runnable);
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textView1);
        new Thread(new ClientListen()).start();
button.setOnClickListener(this);
        //button2.setOnClickListener(this);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //if(v==button){
                counter++;
                textViewLitres.setText(Integer.toString(counter));
                //    }
            }
        });
    }
 
}
если убрать строчку
button.setOnClickListener(this);
то приложение запускается, но и на клики не реагирует :-(

что в данном случае яляется this? по идее я это this указываю из того же места, что и в тюториале.
правда, есть вероятность, что кнопка лежит поверх какого-то другого элемента - это может вызвать такую ошибку?

Добавлено через 10 минут
на всякий случай, вот сообщение об ошибке:

07-09 03:00:09.470 17770-17770/com.example.red.udp_listener_test W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x416edd40)
07-09 03:00:09.472 17770-17770/com.example.red.udp_listener_test E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.red.udp_listener_test, PID: 17770
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.red.udp_listener_test/com.example.red.udp_listener_test.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2124)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1892)
at com.example.red.udp_listener_test.MainActivity.<init>(MainActivity.java:20)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)
at android.app.Instrumentation.newActivity(Instrumentation.java:1084)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
************at android.app.ActivityThread.access$800(ActivityThread.java:139)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
************at android.os.Handler.dispatchMessage(Handler.java:102)
************at android.os.Looper.loop(Looper.java:136)
************at android.app.ActivityThread.main(ActivityThread.java:5086)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:515)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
************at dalvik.system.NativeStart.main(Native Method)
07-09 03:00:11.436 17770-17770/? I/Process﹕ Sending signal. PID: 17770 SIG: 9


какое-то ZygoteInit...

Добавлено через 33 минуты
UPD
Нашел затык - объявил в самом начале класса правильно. а вот в onCreate надо было продублировать что ли - забыл.
Короче, теперь лучше - кнопка нажимается (знчение инкриментируется), но всё равно вылетает

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
public class MainActivity extends Activity implements OnClickListener {
    Button button;
    //Button button = (Button) findViewById(R.id.button);
    Button button2;
    int counter = 0;
    TextView textViewLitres;
    TextView textViewADC;
    private String ip;
    private int port;
    static TextView tv;
    public static Handler UIHandler;
    static
    {
        UIHandler = new Handler(Looper.getMainLooper());
    }
    public static void runOnUI(Runnable runnable) {
        UIHandler.post(runnable);
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textView1);
        button = (Button) findViewById(R.id.button);
        new Thread(new ClientListen()).start();
 
        //button2.setOnClickListener(this);
        button.setOnClickListener(this);
    };
    @Override
    public void onClick(View v) {
        if(v==button){
        counter++;
            Log.d("button liters clicked", Integer.toString(counter));
        textViewLitres.setText(Integer.toString(counter));
            }
    };
}
на этот раз мешается строчка в обработчике onClick:
textViewLitres.setText(Integer.toString(counter));
и кажется, я даже догадываюсь, почему (странно, что он на этапе компиляции на это никак не ругается)
Ответ: ok, получилось запихнуть в массив. теперь такое дело.
удобнее всего мне бы было заиметь этот массив в почте - хотя бы и просто сырым текстом построчно.
но дело в том, что вайфай-сетка, к которой подцеплено устройство, не будет иметь выхода в интернет.
могу ли я при подключенном вайфае заставить своё приложение ломиться в сеть через 3г?

или проще сразу наплевать на это и пробовать разбираться с файловой системой?

Добавлено через 29 минут
кажется, понял, что нужно: сохранять файл, а потом использоать intent

теперь еще момент. как перевести строчку FF в число 255, строчку 10 в число 16? я что-то подзапутался с этим, не знаю, как у гугла правильно спросить...

Добавлено через 10 часов 37 минут
хехе. вроде всё работает - и сохранение, и отправка, и не так уж и сложно. stackoverflow рулит!
Вопрос: Получить параметры кнопки внутри OnClick

доброго всем
помогите новичку

имеется layout, на котором динамически создается неизвестное количество кнопок.
Каждая кнопка помимо стандартных полей должна иметь некий id
по нажатию каждой из кнопок должен вызываться метод, в метод должен передаваться этот id

создан подкласс
Java
1
2
3
4
5
public class myButton extends Button {
        int myID;
        myButton(Context context){
                super(context);
                myID = 0;       }   }
в цикле создаются его экземпляры, каждому из которых методом setOnClickListener присваивается один и тот же обработчик нажатия onclickMyButton
Java
1
2
3
4
 View.OnClickListener onclickMyButton = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        ......
Как внутри обработчика получить myID?

Спасибо
Ответ: более того, я в этом уверен
по http принимается некий массив с данными, на основании которого должно возникнуть несколько кнопок (по количеству элементов массива). Все кнопки должны делать одно и то же, но с разными элементами массива.
Вопрос: Считывание чисел при нажатии на кнопки

Здравствуйте . Пишу калькулятор под Android на Java . На экране есть кнопки 0-9 , + , - , * , / и запятая . Пользователь набирает цифры , выполняет с помощью них действия и в окошке выводится результат . Столкнулся с небольшой проблемой : как мне считывать числа при нажатии на кнопки чтобы в дальнейшем их использовать для выполнения операций с ними? Думал создать переменные firstValue и secondValue и при вводе числа с клавиатуры присваивать им значения от 0 до 9 соответственно , а дальше с ними уже работать , но тогда нельзя будет ввеси числа больше 10 и больше . Может есть у кого идеи? Заранее спасибо .
Ответ: Один из вариантов создать 2 массива один String второй Real далее мы считываем по нажатию кнопки EditText с уравнением 2+2*2,0 и анализируем строку разделяем цифры в один массив знаки в другой. Далее анализируем массив со знаками и выполняем действия по их приоритету.
А второй способ анализировать стразу строку и искать знаки по приоритету и заменять результат на выражения в строке, тем самым мы знаем количество разных знаков (+-*/) - то есть количество итераций.
Вопрос: Передача текста в кнопку

Всем привет.
Сейчас пытаюсь сделать свое первое приложение, и выбор пал на судоку. Решил создать поле под судоку из 81 кнопки, и 9 кнопок под передачу значений в выбранные кнопки на поле. И вот столкнулся с такой проблемой, код ниже не хочет передавать значение в кнопку. Как я понял, проблема в массиве. Помогите решить данную проблему.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
 
int idBut = 0;
public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button1: idBut = b1.getId(); break;
            case R.id.button82:
                for(int i = 0; i<=masBut.length; i++){
                        if(idBut == masBut[i].getId()){
                           masBut[i].setText("1");
                    }
                } break;
        }
}
Ответ: NikBobkov, ваш код не работал потому что вы инициализировали массив ссылками на кнопки в которые еще ничего не было записано - то есть там был null
Вопрос: Программная расстановка большого количества кнопок

Здравствуйте, переношу своё сетевое приложение на java "Морской бой" и столкнулся с небольшой проблемой, я совсем не понял, как можно программно расставлять кнопки, прошу помощи у более умных людей .
А вся проблема в том, что в десктопной версии я полностью сам расставляю кнопки, в коде сама вычисляется позиция, куда нужно поставить кнопку, а вот как каким образом расставить элементы на андройде я не знаю
+ даже если есть какой-то способ расставить точно по координатам - то теряется поддержка разных разрешений.
Вот 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
 private void paintCells(int xLoc, int yLoc, int xSiz, int ySiz, boolean rival){
        int xLocM = xLoc;
        int defY = yLoc;
        byte i = 0;
        while (i < 100){
            int x = i / 10; //это находит первую цифру двухзначного числа (прим из числа 82 получается 8)
            int y = i - (Math.round(i/10)*10); //это находит вторую цифру двухзначного числа (прим из числа 82 получается 2)
            if (!rival) {
                MyCells cell = new MyCells(); //новый объект 
                myCellsList[x][y] = cell;        // записываем его в массив
                cell.x = (byte)  x;                 //записываем в ячейку её координаты
                cell.y = (byte)  y;
                cell.index = i;                       
                cell.setLocation(xLocM, yLoc); //ставим кнопку на координаты xLocM, yLoc
                cell.setSize(xSiz, ySiz);          // ставим заданный размер в пикселях
                cell.setBorder(null);               // убираю обводку
                add(cell);                             // добавляю на панель
            }
            if (rival){
                RivalCells cell = new RivalCells();  //точно такой-же код, но записываем ссылки на ячейки в другой массив
                rivalCellsList[x][y] = cell;
                cell.x = (byte)  x;
                cell.y = (byte)  y;
                cell.index = i;
                cell.setLocation(xLocM, yLoc);
                cell.setSize(xSiz, ySiz);
                cell.setBorder(null);
                add(cell);
            }
            i++;
            if (xGrid < 9){                                            //если ячейка по вертикали не 9 (с 0), то добавляем к x координате 
                xLocM = xLoc + (xSiz * (xGrid + 1));         //размер ячейки, и инкрементируем колличество уже нарисованных 
                xGrid++;                                               //по горизонтали
            } else{
                yLoc = yLoc + ySiz;                                 //иначе инкрементируем y координату, и ставим вертикальный
                xGrid = 0;                                              //счётчик в 0
                xLocM = xLoc;
            }
        }
        JPanel visual = new JPanel();                                                    //Создаём панель для буковок
        visual.setSize(xSiz * 10 + 30, ySiz * 10 + 30);
        visual.setLocation(xLoc - 20, defY - 20);                                      //тут везде украшательства
        visual.setBorder(BorderFactory.createEtchedBorder());
        visual.setVisible(true);
        visual.setLayout(null);
        paintLine("АБВГДЕЁЖЗИ" , visual, xSiz * 10 + 40 , true);             //рисует линию из заданных букв, в
        paintLine("0123456789" , visual, xSiz * 10 + 40 , false);              // заданном направлении
        add(visual);
    }
Ответ:
Сообщение от ICaxapI
как можно программно расставлять кнопки
Начни с этого:
Вопрос: Достать массив из динамически созданного адаптера)

Есть EditText, кнопка и ListView, по нажатию кнопки в список добавляется элемент с названием из EditText'a и вызывается рекурсивная функция, которая генерирует такие же элементы интерфейса, но для следующих (дочерних) уровней и назначает сама себя на одно из событий (добавление элемента в список), в итоге максимум может быть 10 уровней, у каждого списка может быть 10 элементов (и у каждого из них может быть по 10 дочерних) ну и в общем 10 в 10 степени максимум))

Я в AS и на Jave работаю около недели, мне необходимо заполненные значения сохранить в файл. Я так и не нашел как можно типизированный файл создать, разобрался только с *.txt, но помимо сохранения в файл, нужно еще оттуда и считывать) и возникает 2 вопроса:
1) Как мне достать массив из динамически созданного адаптера
2) Возможно кто то направит меня на типизированные файлы (я гуглил пару часов (может быть был немножко не в себе) но так и не нашел ничего с ними связанного), просто для тхтшника писать универсальную функцию очень не хочется=)
Ответ: П.с., айдишники задавал только для LinearLayout'ов с уровнями (их всего 10), чисто теоритически я понимаю, что можно достать как то чилдов из них,а потом у тех достать чилдов, а потом у ListView'a достать адаптер и из него как то достать массив)
Вопрос: Оформление кнопки: отследить, вмещается ли текст в размеры кнопки

Добрый день, задача стоит следующая
динамически создаю кучу кнопок, каждой присваиваю setText из массива.
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
   for (int i=0;i<title.length;i++){
                button[i]=new Button(pc.vorgul.testnewsparser.MainActivity.this);
                button[i].setText(title[i]+"\n"+description[i]);
                button[i].setId(View.generateViewId());
                button[i].setOnClickListener(pc.vorgul.testnewsparser.MainActivity.this);
                lMain.addView(button[i],lMain.getWidth(),size.y/3);
            }
        }
как отследить, вмещается ли текст в размеры кнопки, и если не вмещается, то в конце ставить троеточие??
Ответ: есть там некоторое количество граблей, по которым надо будет сходить. разрешение экрана, размер шрифта, ширина полей...
решение в лоб - ограничивать длинну какой-то известной цифрой. а ее задать на основании размера и разрешения экрана.

я бы попробовал сделать по-другому.
создаем кнопку, кидаем в нее текст, заранее известного размера (100символов например), показываем, меряем, скрываем. после этого у нас есть некий замер, который можно использовать в качестве эталонного.
дальше наверно понятно.
Вопрос: 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);
    }
}



 

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

Вопрос: Показать кнопки при клике на нужный элемент

Добрый вечер!

Проблема: мне нужно на начальном этапе сделать кнопки "скрытыми", и как только нажимают на нужный элемент - сделать кнопки видимыми.

Делаю так, как посоветовали:

(Этот кусок кода я прописываю в методе onCreate)
Java(TM) 2 Platform Standard Edition 5.0
1
2
final ImageButton btn1 = (ImageButton) this.findViewById(R.id.btn);
        btn1.setVisibility(View.GONE);
отлично, кнопки скрывает.
Вешаю на картинку обработчик клика - "если на тебя нажали - покажи мне эти кнопки".

Java(TM) 2 Platform Standard Edition 5.0
1
2
final ImageButton btn1 = (ImageButton) this.findViewById(R.id.btn);
        btn1.setVisibility(View.VISIBLE);
Но проблема в том, что кнопки не показываются. Да, кнопки "типа сдвигаются", типа там где-то существуют, но не отображаются. Попробовала скрытие кнопок убрать на другой элемент, т.е.:
нажимаем на другой элемент -> кнопки скрываются.
нажимаем на нужную картинку - кнопки показываются.

А как сделать так, чтобы сразу кнопки были скрыты и по клику отображались?

Обработчик клика (находится в onCreate):
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
final ImageView imgTep = (ImageView) this.findViewById(R.id.imgt);
 
        imgTep.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View arg0, MotionEvent event) {
                // Нажатие
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    final ImageButton btn1 = (ImageButton) findViewById(R.id.btn);
                    btn1.setVisibility(View.VISIBLE); 
                }
 
                return true;
            }
        });
Ответ:
Сообщение от Nullik
Вот такие приколы с этой кнопкой
а в чем прикол? если вы знаете как скрывать или отображать кнопки было бы логично для начала
написать что судя по логу строка например
findViewById(R.id.btn).setVisibility(View.VISIBLE);
выполнилась
тогда понятно будет что что то не так с этой строкой (или какой то другой от которой вы ожидаете чего то)
есть такая строка-обманщица?