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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
#1

Может ли быть два виджета в одном проекте где у каждого будет своя активити настроек? - Программирование Android

12.11.2012, 16:08. Просмотров 1533. Ответов 11
Метки нет (Все метки)

Попытался так сделать, все везде написал и в provider и в manifest, но все равно при добавлении второго виджета вылетает активити первого виджета
Может так нельзя делать?
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2012, 16:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Может ли быть два виджета в одном проекте где у каждого будет своя активити настроек? (Программирование Android):

Как создать базу данных для сайта,где может быть много значений в одном поле - PHP БД
Может немного глуповатый вопрос,но все же... Есть база данных и сайт,допустим у пользователя сайта в графе интересы могут быть несколько...

Как использовать два winsock контрола в одном проекте - Visual Basic
Не получается работать с двумя winsock контролами, второй не подключается.

Может ли в одном классе быть несколько конструкторов? - Python
Доброго времени суток. Программируя на питоне, возникла потребность создать несколько конструкторов в одном классе. Может ли кто...

Как связать два cpp файла в одном проекте (visual studio 2010) - C++
Есть два программы: одна создает файл.txt, вторая читает из него данные и выводит на экран. создает файл #include <iostream> ...

Как сделать, чтобы два проекта с разной кодировкой работали в одном объединённом проекте? - C++
Добрый день подскажите есть два проекта в одном стоит многобайтовая кодировка в другом юникод, по отдельности все нормально компилируется...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил) - C++
написать универсальный тип, который представляет точку на плоскости в координатах (х, у) и в полярных координатах. Написать функцию для...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.11.2012, 16:15 #2
чем мотивирует свой вылет активити первого виджета?
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
12.11.2012, 16:36  [ТС] #3
Цитата Сообщение от V0v1k Посмотреть сообщение
чем мотивирует свой вылет активити первого виджета?
Не совсем понял вопрос, извините.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.11.2012, 16:58 #4
если вылетает, значит на это есть причина и она написана в логах.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
12.11.2012, 17:22  [ТС] #5
Цитата Сообщение от V0v1k Посмотреть сообщение
если вылетает, значит на это есть причина и она написана в логах.
Прошу прощения. Вылетает не значит аварийно завершается, а просто открывается вместо нужного активити. Если вы это и имели ввиду, то где искать логи? apk сразу устанавливается на телефон

Добавлено через 19 минут
А что означает содержание файла lint.xml?

Java
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="ObsoleteLayoutParam">
        <ignore path="res\layout\activity_preferences.xml" />
    </issue>
    <issue id="UselessParent">
        <ignore path="res\layout\widget_layout.xml" />
    </issue>
</lint>
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.11.2012, 18:46 #6
Цитата Сообщение от dubok79 Посмотреть сообщение
а просто открывается вместо нужного активити.
значит вы указали открывать это активити вместо нужного.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
12.11.2012, 18:56  [ТС] #7
Цитата Сообщение от V0v1k Посмотреть сообщение
значит вы указали открывать это активити вместо нужного.
А где это указывается? В манифесте?
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
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <receiver
            android:name=".WidgetActivity"
            android:label="@string/widget_title" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
 
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_provider" />
        </receiver>
 
        <activity
            android:name=".PreferencesActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:label="@string/widget_preferences_title"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>
 
        <receiver
            android:name=".Widget_1x1_Activity"
            android:label="@string/widget_1x1_title" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
 
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_1x1_provider" />
        </receiver>
 
        <activity
            android:name=".Preferences_1x1_Activity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:label="@string/widget_preferences_title"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>
Java
1
2
3
4
5
6
7
8
9
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minHeight="64dp" 
    android:minWidth="294dp"
    android:updatePeriodMillis="3600000"
    android:initialLayout="@layout/widget_layout"
    android:focusable="true" 
    android:configure=".Preferences_Activity"
    android:previewImage="@drawable/widget_preview_image">
</appwidget-provider>
Java
1
2
3
4
5
6
7
8
9
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minHeight="64dp" 
    android:minWidth="64dp"
    android:updatePeriodMillis="3600000"
    android:initialLayout="@layout/widget_1x1_layout"
    android:focusable="true" 
    android:configure=".Preferences_1x1_Activity"
    android:previewImage="@drawable/widget_1x1_preview_image">
</appwidget-provider>
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.11.2012, 19:04 #8
покажите еще код обеих активитей.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
13.11.2012, 06:05  [ТС] #9
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
package com.daa.widget;
 
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.widget.RemoteViews;
import android.widget.Toast;
 
public class WidgetActivity extends AppWidgetProvider {
    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
    public static String URI_SCHEME = "ABC";
    
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        final int N = appWidgetIds.length;
        for (int i = 0; i < N; i++) {
            int appWidgetId = appWidgetIds[i];
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }
    }
 
    public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
 
        RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        updateViews.setTextViewText(R.id.line_info_1, "Hello"); 
        
        Intent configIntent = new Intent(context, PreferencesActivity.class);
        configIntent.setAction(ACTION_WIDGET_CONFIGURE);
        Uri data = Uri.withAppendedPath(Uri.parse(URI_SCHEME + "://widget/id/"),String.valueOf(appWidgetId));
        configIntent.setData(data);
        PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
        updateViews.setOnClickPendingIntent(R.id.widget_imageview, configPendingIntent);
        appWidgetManager.updateAppWidget(appWidgetId, updateViews);
    }
 
}
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
package com.daa.widget;
 
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.widget.RemoteViews;
import android.widget.Toast;
 
public class WidgetActivity extends AppWidgetProvider {
    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
    public static String URI_SCHEME = "ABC";
    
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        final int N = appWidgetIds.length;
        for (int i = 0; i < N; i++) {
            int appWidgetId = appWidgetIds[i];
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }
    }
 
    public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
 
        RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_1x1_layout);
        updateViews.setTextViewText(R.id.widget_1x1_line_info, "Hello");    
        
        Intent configIntent = new Intent(context, Preferences_1x1_Activity.class);
        configIntent.setAction(ACTION_WIDGET_CONFIGURE);
        Uri data = Uri.withAppendedPath(Uri.parse(URI_SCHEME + "://widget/id/"),String.valueOf(appWidgetId));
        configIntent.setData(data);
        PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
        updateViews.setOnClickPendingIntent(R.id.widget_1x1_imageview, configPendingIntent);
        appWidgetManager.updateAppWidget(appWidgetId, updateViews);
    }
 
}
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
13.11.2012, 13:24 #10
вы вместо активитей дважды скопировали код виджета.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
14.11.2012, 12:11  [ТС] #11
Пока вставлял код активитей, нашел ошибку:
вот в этой строке setContentView(R.layout.activity_preferences); указал не тот layout

P.S. будут ли какие либо проблемы, если в одном проекте у двух активитей будут контролы (View) с одинаковыми ид?

Добавлено через 2 часа 42 минуты
Как то все равно непонятно и глючно работает.
Новый виджет размером 1х1 добавляется, открывается нужое активити его настроек, но после закрытия активити обновление виджета идет кодом из большего виджета. Далее если обновить все виджеты то маленькие считывают настройки откуда нужно и все хорошо. по тапу на нем снова открывается нужное окно, но после его закрытия опять как с самого начала, мало того по тапу уже начинает открываться активити настроек большего виджета. Никак не пойму в чем дело

Добавлено через 19 минут
уфф... нашел , оказывается я вызывал функцию обновления виджета из другого кода .... безобразие
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.11.2012, 21:39 #12
Цитата Сообщение от dubok79 Посмотреть сообщение
вот в этой строке setContentView(R.layout.activity_preferences); указал не тот layout
так и думал


Цитата Сообщение от dubok79 Посмотреть сообщение
будут ли какие либо проблемы, если в одном проекте у двух активитей будут контролы (View) с одинаковыми ид?
нет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2012, 21:39
Привет! Вот еще темы с ответами:

как правильно сделать в одном запросе может быть несколько подзапросов - PHP БД
Народ подскажите как правильно сделать запрос SELECT id,title FROM table (IN SELECT cat COUNT(*) AS cat FROM tabel2 GROUP BY cat); ...

Как и где объявить строковую переменную, которая будет использоваться во всем проекте? - VBA
Как и где объявить строковую переменную, которая будет использоваться во всем проекте и оставлять свое значение после окончания процедур ее...

Где может быть ошибка? - VBA
Уважаемые форумчане, столкнулся со следующей проблемой... Написал макрос, в котором в столбце AK должны проставляться два значения...

Где может быть редирект? - 1С Битрикс
Добрый день! Подскажите, пожалуйста, где еще может быть редирект, если его нет в headers И нет в .htaccess. Вот код ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.11.2012, 21:39
Ответ Создать тему
Опции темы

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