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

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

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

База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране - Программирование Android

01.01.2014, 15:47. Просмотров 1011. Ответов 11
Метки нет (Все метки)

Всем доброго времени суток
Возникла такая проблема: требуется создать очень простое приложение на Android, но опыта в разработке приложений для мобильных устройств у меня абсолютно никакого. Имеются довольно широкие познания в программировании, схватываю на лету, но на Java и, тем более, под Android ничего не писал.

Суть приложения такова:
Имеется база записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране. В принципе - всё! Желательно, чтобы работало приложение как виджет, без необходимости запускать его, чтобы увидеть запись.

Хочу сделать небольшой подарок дорогому человеку, а средств нет... Помогите, будьте добры. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2014, 15:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране (Программирование Android):

В магазине работает 5 человек, нужно составить график их работы, нужно что бы каждый день работало по 3 чел - C++
В магазине работает 5 человек, нужно что бы каждый день работало по 3 человека, но что бы через день работы каждый из этих 3 отдыхал, а на...

Подкиньте пару-тройку примеров сайтов для вёрстки - HTML, CSS
Я начал изучать веб-мастерство и хочу сделать пробный "заезд", то есть попробовать сделать страничку. Подкиньте ссылок или PSD шаблонов...

На пару-тройку секунд пера на планшете выползает контекстное меню - Windows 7
У меня такая неприятная ерунда.. При задержке на пару-тройку секунд пера на планшете выползает контекстное меню - жутко неудобно работать в...

Нужно каждый день выдавать бланк. Что рациональнее экспорт в Excel или печать отчета? - MS Access
Понадобилось печатать одинаковые бланки каждый день. В созданной базе имеется запрос выдающий список номеров работников. Есть готовый...

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

Найти выручку за каждый день и в какой день она максимальна - QBasic
представлена выручка магазина за неделю по 5 товарам. 1 найти выручку за каждый день и в какой день она максимальна 2 какой из товаров...

11
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
01.01.2014, 17:18 #2
Kollapser, смотрите, ничего сложного нет. Вот Вам пример простейшего виджета
хабр. База записей - прогуглите SQLite android, тоже много статей, работа с базой довольно простая. Что непонятно будет - пишите, разберёмся.
1
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 10:25  [ТС] #3
Промучился около получаса. Что мы имеем в итоге? Ничего. При запуске просто появляется стандартный "Hello World". Самого виджета в системе я не нашел. Код в MainActivity.java я не менял, а там прописано:

Java
1
2
3
4
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
То есть, как я понял, показывается стандартный слой.

Добавлено через 25 минут
Плюс почитал статьи об SQLite. Я понимаю далеко не все, что там написано. Вероятно, дело в том, что с ООП я практически не имел дел. И все мои познания ограничиваются процедурным программированием.

Я просто не успею до завтра разобраться с нуля в Java и осмысленно что-то сделать. Поэтому прошу вас мне помочь. Ведь для опытного человека задача совсем детская.

Добавлено через 3 часа 50 минут
Окей, пойдем немного другим путем. Решил не заморачиваться и просто хранить строи в массиве
Теперь в файле MainActivity.java после строки "public class MainActivity extends Activity" я пишу "String con[] = {"1","2"};" Таким образом у меня есть массив из двух элементов.
Теперь вопрос, как при запуске записать в textview один из элементов?

Добавлено через 2 минуты
Вызывает проблемы расположение этого присваивания и обращение к элементу

Добавлено через 2 минуты
Или может записать все элементы в константы и уже к ним обращаться?

Добавлено через 54 минуты
С виджетом тоже почти разобрался.
Делал как здесь. Все запускается, но не могу добавить виджет на рабочий стол. В виджетах его просто нет, а в приложение Widget Preview после выбора моего виджета появляется надпись "невозможно добавить виджет"

Добавлено через 57 минут
Переименовал проект, как в уроке - все заработало

Добавлено через 7 часов 52 минуты
Снова здравствуйте. Что-то не выходит, помогите допилить
Создал виджет, все замечательно. Теперь хочу самостоятельно его обновлять. В принципе, могу обойтись и стандартными методами так как временной промежуток довольно большой, но просто захотел проверить обновляется ли что-то вообще.

Имею в MyWidget.java такой код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package ru.startandroid.develop.p1171simplewidget;
 
import java.util.Arrays;
 
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.TextView;
 
public class MyWidget extends AppWidgetProvider {
  final String UPDATE_ALL_WIDGETS = "update_all_widgets";
  final String LOG_TAG = "myLogs";
  int i = 0;
 
  @Override
  public void onEnabled(Context context) {
      super.onEnabled(context);
        Intent intent = new Intent(context, MyWidget.class);
        intent.setAction(UPDATE_ALL_WIDGETS);
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(),
            60000, pIntent);
        Log.d(LOG_TAG, "onEnabled");
  }
 
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
      int appWidgetID) {
      Log.d(LOG_TAG, "onUpdate " + Integer.toString(appWidgetID));
      i += 1;
      RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
      remoteViews.setTextViewText(R.id.tv,Integer.toString(i)); 
  }
 
  @Override
  public void onDeleted(Context context, int[] appWidgetIds) {
    super.onDeleted(context, appWidgetIds);
  }
 
  @Override
  public void onDisabled(Context context) {
      super.onDisabled(context);
        Intent intent = new Intent(context, MyWidget.class);
        intent.setAction(UPDATE_ALL_WIDGETS);
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(pIntent);
  }
  
  @Override
  public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    if (intent.getAction().equalsIgnoreCase(UPDATE_ALL_WIDGETS)) {
      ComponentName thisAppWidget = new ComponentName(
          context.getPackageName(), getClass().getName());
      AppWidgetManager appWidgetManager = AppWidgetManager
          .getInstance(context);
      int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget);
      for (int appWidgetID : ids) {
        onUpdate(context, appWidgetManager, appWidgetID);
      }
    }
  }
}
То есть каждую минуту, в теории у меня должен вызываться onUpdate и писать новую цифру на экране. Судя по логам, эта функция вызывается каждую минуту, но изменений на экране я не наблюдаю. Что не так?

Добавлено через 3 минуты
Он у меня немного поругался, в итоге пришлось убрать @Override перед апдейтом, а также заменить массив индексов просто на число (больше одного экземпляра виджета мне и не нужно)

Добавлено через 42 минуты
Чуть ошибся. В апдейте изменил i+=1 на i++. Теперь вывожу это число в логи, но оно тоже не меняется.

Добавлено через 46 минут
Извините за столь обильные подробности разработки

Так как ничего по сути не работало, вернул все обратно

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package ru.startandroid.develop.p1171simplewidget;
 
import java.util.Arrays;
 
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.util.Log;
import android.widget.RemoteViews;
 
public class MyWidget extends AppWidgetProvider {
 
  final String LOG_TAG = "myLogs";
  int i = 0;
  
  @Override
  public void onEnabled(Context context) {
    super.onEnabled(context);
    Log.d(LOG_TAG, "onEnabled");
  }
 
  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
      int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
    Log.d(LOG_TAG, Integer.toString(i));
    Log.d(LOG_TAG, "onUpdate " + Arrays.toString(appWidgetIds));
    i ++;
    remoteViews.setTextViewText(R.id.tv,Integer.toString(i));
    Log.d(LOG_TAG, Integer.toString(i)); 
  }
 
  @Override
  public void onDeleted(Context context, int[] appWidgetIds) {
    super.onDeleted(context, appWidgetIds);
    Log.d(LOG_TAG, "onDeleted " + Arrays.toString(appWidgetIds));
  }
 
  @Override
  public void onDisabled(Context context) {
    super.onDisabled(context);
    Log.d(LOG_TAG, "onDisabled");
  }
 
}
При запуске в логах вижу следующее:
01-02 11:42:35.066: D/myLogs(664): onEnabled
01-02 11:42:35.087: D/myLogs(664): onUpdate [7]
01-02 11:42:35.437: D/myLogs(664): onUpdate [7]
01-02 11:42:42.936: D/myLogs(769): 0
01-02 11:42:42.936: D/myLogs(769): onUpdate [8]
01-02 11:42:42.936: D/myLogs(769): 1

То есть переменная i, вроде как увеличивается, но значение её в textview не записывается, как быть-то?

Добавлено через 4 минуты
Ещё одна маленькая проблема: если удалить виджет и заново разместить то увидим в логах тоже самое, то есть создается новая переменная i, которой вновь присваивается значение 0. Можно её хранить где-нибудь, чтобы при случайном удалении виджета ничего не сломалось?

Или это не нужно? Так как все что осталось сделать, это заставить виджет обновляться два раза в день, допустим в 7.00 и в 22.00 и, в зависимости от даты, выводить два определенных сообщения.

Добавлено через 35 минут
Подождал полчаса. OnUpdate не вызывался. В логах в это время:
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
01-02 12:15:08.078: D/ExchangeService(615): Received deviceId from Email app: null
01-02 12:15:08.078: D/ExchangeService(615): !!! deviceId unknown; stopping self and retrying
01-02 12:15:13.141: D/ExchangeService(615): !!! EAS ExchangeService, onStartCommand, startingUp = false, running = false
01-02 12:15:13.151: W/ActivityManager(275): Unable to start service Intent { act=com.android.email.ACCOUNT_INTENT } U=0: not found
01-02 12:15:13.151: D/ExchangeService(615): !!! Email application not found; stopping self
01-02 12:15:13.161: W/ActivityManager(275): Unable to start service Intent { act=com.android.email.ACCOUNT_INTENT } U=0: not found
01-02 12:15:13.172: E/ActivityThread(615): Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ce8d40 that was originally bound here
01-02 12:15:13.172: E/ActivityThread(615): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ce8d40 that was originally bound here
01-02 12:15:13.172: E/ActivityThread(615):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-02 12:15:13.172: E/ActivityThread(615):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-02 12:15:13.172: E/ActivityThread(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-02 12:15:13.172: E/ActivityThread(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-02 12:15:13.172: E/ActivityThread(615):  at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-02 12:15:13.172: E/ActivityThread(615):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-02 12:15:13.172: E/ActivityThread(615):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-02 12:15:13.172: E/ActivityThread(615):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-02 12:15:13.172: E/ActivityThread(615):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-02 12:15:13.172: E/ActivityThread(615):  at java.lang.Thread.run(Thread.java:856)
01-02 12:15:13.181: E/StrictMode(615): null
01-02 12:15:13.181: E/StrictMode(615): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ce8d40 that was originally bound here
01-02 12:15:13.181: E/StrictMode(615):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-02 12:15:13.181: E/StrictMode(615):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-02 12:15:13.181: E/StrictMode(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-02 12:15:13.181: E/StrictMode(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-02 12:15:13.181: E/StrictMode(615):  at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-02 12:15:13.181: E/StrictMode(615):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-02 12:15:13.181: E/StrictMode(615):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-02 12:15:13.181: E/StrictMode(615):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-02 12:15:13.181: E/StrictMode(615):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-02 12:15:13.181: E/StrictMode(615):  at java.lang.Thread.run(Thread.java:856)
01-02 12:15:13.181: W/ActivityManager(275): Unbind failed: could not find connection for android.os.BinderProxy@41026820
01-02 12:15:13.191: E/ActivityThread(615): Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ced1a0 that was originally bound here
01-02 12:15:13.191: E/ActivityThread(615): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ced1a0 that was originally bound here
01-02 12:15:13.191: E/ActivityThread(615):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-02 12:15:13.191: E/ActivityThread(615):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-02 12:15:13.191: E/ActivityThread(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-02 12:15:13.191: E/ActivityThread(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-02 12:15:13.191: E/ActivityThread(615):  at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-02 12:15:13.191: E/ActivityThread(615):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-02 12:15:13.191: E/ActivityThread(615):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-02 12:15:13.191: E/ActivityThread(615):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-02 12:15:13.191: E/ActivityThread(615):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-02 12:15:13.191: E/ActivityThread(615):  at java.lang.Thread.run(Thread.java:856)
01-02 12:15:13.191: E/StrictMode(615): null
01-02 12:15:13.191: E/StrictMode(615): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ced1a0 that was originally bound here
01-02 12:15:13.191: E/StrictMode(615):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-02 12:15:13.191: E/StrictMode(615):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-02 12:15:13.191: E/StrictMode(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-02 12:15:13.191: E/StrictMode(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-02 12:15:13.191: E/StrictMode(615):  at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-02 12:15:13.191: E/StrictMode(615):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-02 12:15:13.191: E/StrictMode(615):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-02 12:15:13.191: E/StrictMode(615):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-02 12:15:13.191: E/StrictMode(615):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-02 12:15:13.191: E/StrictMode(615):  at java.lang.Thread.run(Thread.java:856)
01-02 12:15:13.201: W/ActivityManager(275): Unbind failed: could not find connection for android.os.BinderProxy@41052dd8
01-02 12:15:58.207: D/ExchangeService(615): Received deviceId from Email app: null
01-02 12:15:58.207: D/ExchangeService(615): !!! deviceId unknown; stopping self and retrying
01-02 12:16:03.271: D/ExchangeService(615): !!! EAS ExchangeService, onStartCommand, startingUp = false, running = false
Виджет был создан в 11.45
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
02.01.2014, 12:28 #4
Kollapser, onUpdate - коллбэк, который вызывать в ручную не надо.
update widget

Вот что написано в доках
"Called in response to the ACTION_APPWIDGET_UPDATE broadcast when this AppWidget provider is being asked to provide RemoteViews for a set of AppWidgets. Override this method to implement your own AppWidget functionality."
Т.е. это реакция на ресивер.
1
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 15:24  [ТС] #5
Хорошо, я убрал собственное обновление. Но, судя по логам, автоматическое тоже не работает.
И подскажите, пожалуйста, как вывести элемент массива в textview на виджете. Указанный мной код не работает.

Добавлено через 1 час 17 минут
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
package ru.startandroid.develop.p1171simplewidget;
 
import java.util.Arrays;
 
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.util.Log;
import android.widget.RemoteViews;
 
public class MyWidget extends AppWidgetProvider {
 
  final String LOG_TAG = "myLogs";
 
  @Override
  public void onEnabled(Context context) {
    super.onEnabled(context);
    Log.d(LOG_TAG, "onEnabled");
  }
 
  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
      int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    Log.d(LOG_TAG, "onUpdate " + Arrays.toString(appWidgetIds));
    for (int id : appWidgetIds) {
        updateWidget(context, appWidgetManager, id);
    }
  }
 
  @Override
  public void onDeleted(Context context, int[] appWidgetIds) {
    super.onDeleted(context, appWidgetIds);
    Log.d(LOG_TAG, "onDeleted " + Arrays.toString(appWidgetIds));
  }
 
  @Override
  public void onDisabled(Context context) {
    super.onDisabled(context);
    Log.d(LOG_TAG, "onDisabled");
  }
  
  static void updateWidget(Context context, AppWidgetManager appWidgetManager, int widgetID) {  
      
        RemoteViews widgetView = new RemoteViews(context.getPackageName(),
            R.layout.widget);
        widgetView.setTextViewText(R.id.tv, "Привет");
     
        appWidgetManager.updateAppWidget(widgetID, widgetView);
      }
 
}
Вот так все работает.

Добавлено через 1 час 34 минуты
С отображением текста проблем нет. Теперь вопрос: как поменять шрифт в TextView? И можно ли это вообще сделать? У remoteViews нет метода settypeface(
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
02.01.2014, 16:31 #6
Цитата Сообщение от Kollapser Посмотреть сообщение
С отображением текста проблем нет. Теперь вопрос: как поменять шрифт в TextView? И можно ли это вообще сделать? У remoteViews нет метода settypeface(
Изменение размера шрифта
docs

хабр изменение typeface. Вы гуглом пользуетесь вообще?
0
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 18:14  [ТС] #7
YuraAAA, я пробовал, но он создает одну длинную картинку, которая на экран не влезает. Что делать, если несколько строк?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
02.01.2014, 18:26 #8
Может попробовать разбить на несколько строк?
0
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 18:41  [ТС] #9
YuraAAA, ладно. Спасибо большое за помощь. Не буду больше заморачиваться. Вроде, все работает. Просто с текстом. Теперь вопрос как это грамотно экспортировать и закинуть на телефон. У самого смартфона отродясь не было, так что асболютно не в курсе. Почитал про экспорт в jar, но у меня же виджет. Не уверен, что будет корректно работать.
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
02.01.2014, 18:45 #10
Я никогда виджеты не делал, но мне кажется, что это такой же apk файл. Так что просто сделайте build и в папке с проектом должна остаться apk-шка)
1
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 18:58  [ТС] #11
YuraAAA, если я правильно понял, то нужно выставить галочку build automatically и скомпилить? Я так и сделал. D:\Android\workspace\P1171_SimpleWidget\bin там есть apk-файлик, который весит 287 кб. Его можно скидывать на телефон и запускать?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
02.01.2014, 19:07 #12
да, всё верно
1
02.01.2014, 19:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2014, 19:07
Привет! Вот еще темы с ответами:

Спортсмен тренируется, и в 1 день пробежал 2км. В каждый следующий день он пробегает на 20% больше - Turbo Pascal
Спортсмен тренируется, и в 1 день пробежал 2км. В каждый следующий день он пробегает на 20% больше, чем в предыдущий день. Найти: 1)...

Спортсмен в первый день пробежал 10 км. Каждый следующий день он увеличивал дневную норму на 10% - Turbo Pascal
Спортсмен в первый день пробежал 10 км. Каждый следующий день он увеличивал дневную норму на 10% от пробега предыдущего дня. Через сколько...

Спортсмен на тренировке в 1 день пробежал 10 км, каждый день он увеличивал дневную норму на 10% предыдущего дня - Turbo Pascal
Спортсмен на тренировке в 1 день пробежал 10 км, каждый день он увеличивал дневную норму на 10% предыдущего дня. Какой суммарный путь...

Циклические алгоритмы,Начав тренироваться, лыжник в первый день пробежал n км. Каждый следующий день - C++
Начав тренироваться, лыжник в первый день пробежал n км. Каждый следующий день он увеличивал пробег на 10% от пробега предыдущего дня. В...


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

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

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