powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Почему заглох Eclipse Andmore?
25 сообщений из 75, страница 3 из 3
Почему заглох Eclipse Andmore?
    #39703615
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewА без указания id у верхнего layout - нет. Блин, кому я это говорю
вот именно, кому я вообще что-то пытаюсь объяснять, человек гуглом пользоваться не умеет. у activity есть корневой контейнер с id android.R.id.content, он и содержит твой layout

Eugene NewПочувствуйте разницу между файлом исходного кода в простом виде в каталоге проекта, который сразу видно и тем, что где то там генериться в нечитаемом виде
твоя глупость может сравниться только с твоим упрямством. вот класс сгенеренный с помощью androidannotations на базе java annotation processing. что тут нечитаемого?


Код: 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.
public final class MyActivity_
    extends MyActivity
    implements HasViews, OnViewChangedListener
{
    private final OnViewChangedNotifier onViewChangedNotifier_ = new OnViewChangedNotifier();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        OnViewChangedNotifier previousNotifier = OnViewChangedNotifier.replaceNotifier(onViewChangedNotifier_);
        init_(savedInstanceState);
        super.onCreate(savedInstanceState);
        OnViewChangedNotifier.replaceNotifier(previousNotifier);
    }

    @Override
    public<T extends View> T internalFindViewById(int id) {
        return ((T) this.findViewById(id));
    }

    private void init_(Bundle savedInstanceState) {
        OnViewChangedNotifier.registerOnViewChangedListener(this);
        restoreSavedInstanceState_(savedInstanceState);
    }

    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(layoutResID);
        onViewChangedNotifier_.notifyViewChanged(this);
    }

    @Override
    public void setContentView(View view, LayoutParams params) {
        super.setContentView(view, params);
        onViewChangedNotifier_.notifyViewChanged(this);
    }

    @Override
    public void setContentView(View view) {
        super.setContentView(view);
        onViewChangedNotifier_.notifyViewChanged(this);
    }
   
    @Override
    public void onViewChanged(HasViews hasViews) {
        this.progressText = hasViews.internalFindViewById(android.R.id.text1);
        this.progressView = hasViews.internalFindViewById(R.id.progress);
        this.content = hasViews.internalFindViewById(R.id.content);
        this.tabs = hasViews.internalFindViewById(R.id.tabs);
        this.toolbar = hasViews.internalFindViewById(R.id.toolbar);
        this.appBar = hasViews.internalFindViewById(R.id.appbar);
        setupToolbar();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.syncable_activity_menu, menu);
        menuInflater.inflate(R.menu.bewertung_edit_menu, menu);
        this.menuActionDeleteBewertungen = menu.findItem(R.id.actionDeleteBewertungen);
        this.menuActionHeapDump = menu.findItem(R.id.actionHeapDump);
        this.menuActionSync = menu.findItem(R.id.actionSync);
        this.menuActionUploadSignature = menu.findItem(R.id.actionUploadSignature);
        this.menuActionCheckUpdates = menu.findItem(R.id.actionCheckUpdates);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId_ = item.getItemId();
        if (itemId_ == R.id.actionDeleteBewertungen) {
            deleteBewertungen();
            return true;
        }
        if (itemId_ == R.id.actionHeapDump) {
            makeHeapDump();
            return true;
        }
        if (itemId_ == R.id.actionSync) {
            requestUpSync();
            return true;
        }
        if (itemId_ == R.id.actionShowDeviceInfo) {
            showDeviceInfo();
            return true;
        }
        if (itemId_ == R.id.actionCheckUpdates) {
            checkForUpdates();
            return true;
        }
        if (itemId_ == R.id.actionShowSyncStats) {
            showSyncStats();
            return true;
        }
        if (itemId_ == R.id.actionBackupDb) {
            backupDatabase();
            return true;
        }
        if (itemId_ == R.id.actionUploadSignature) {
            uploadSignature();
            return true;
        }
        if (itemId_ == android.R.id.home) {
            onBackPressed();
            return true;
        }
        if (itemId_ == R.id.actionPrint) {
            onPrintBewertung();
            return true;
        }
        if (itemId_ == R.id.actionAddSchaden) {
            onQuickAddSchaden();
            return true;
        }
        if (itemId_ == R.id.actionSave) {
            onSaveBewertung();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onSaveInstanceState(Bundle bundle_) {
        super.onSaveInstanceState(bundle_);
        bundle_.putSerializable("sessionUser", sessionUser);
        bundle_.putSerializable("sessionFahrzeugArt", sessionFahrzeugArt);
        bundle_.putSerializable("sessionKunde", sessionKunde);
        bundle_.putSerializable("sessionProdukt", sessionProdukt);
        bundle_.putSerializable("sessionStandort", sessionStandort);
        bundle_.putSerializable("selectedTab", selectedTab);
        bundle_.putSerializable("sessionBewertung", sessionBewertung);
    }

    private void restoreSavedInstanceState_(Bundle savedInstanceState) {
        if (savedInstanceState == null) {
            return;
        }
        sessionUser = ((Benutzer) savedInstanceState.getSerializable("sessionUser"));
        sessionFahrzeugArt = ((FahrzeugArt) savedInstanceState.getSerializable("sessionFahrzeugArt"));
        sessionKunde = ((Kunde) savedInstanceState.getSerializable("sessionKunde"));
        sessionProdukt = ((Produkt) savedInstanceState.getSerializable("sessionProdukt"));
        sessionStandort = ((Standort) savedInstanceState.getSerializable("sessionStandort"));
        selectedTab = ((Integer) savedInstanceState.getSerializable("selectedTab"));
        sessionBewertung = ((Bewertung) savedInstanceState.getSerializable("sessionBewertung"));
    }
   
}
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703624
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо же, в первый раз ты что то по делу сказал.
Нет проблем с выделением функции для работы с View

Код: 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 CoolLib
{
    public static void initLayoutImplV (android.view.View mainView, Object l) 
    {
        Class cls = l.getClass();
        java.lang.reflect.Field[] fields = cls.getDeclaredFields();
        
        for (int i = 0; i < fields.length; ++i)
        {
            java.lang.reflect.Field field = fields [i];
            String name = field.getName ();
            android.view.View v = mainView.findViewWithTag(name);
            
            if (v != null)
            {
                try
                {
                    field.set (l, v);
                }
                catch (IllegalArgumentException e)
                {
                }
                catch (IllegalAccessException e)
                {
                }
            }
            
        }
        
    }
    
    
    public static void initLayoutImpl (android.app.Activity activity, Object l,
            int mainViewId) 
    {
        android.view.View mainView = activity.findViewById (mainViewId);
        initLayoutImplV (mainView, l);
    }
}



Код: java
1.
CoolLib.initLayoutImplV (Fragment1.getView())



Код: java
1.
CoolLib.initLayoutImplV (GroupView1);



Мне разжевать как ссылку на Fragment получить прямо при его создании?
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703632
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у activity есть корневой контейнер с id android.R.id.content, он и содержит твой layout

Ок. Значит все еще проще, не нужно ни писать id вручную, ни передавать его. Странное, конечно, решение авторов библиотеки - вместо создания свойства getView у Activity.

вот класс сгенеренный с помощью androidannotations на базе java annotation processing

Проблема в том, что читая исходник ты не видишь всего исходного кода сразу и что сгенерировано может быть как и нормально, так и ужасно. Использование макросов тема для отдельного обсуждения и его очень тяжело вести с человеком, который уже показал свою неспособность воспринимать элементарную информацию.

Почему, кстати, в твоем примере макрос override не раскрылся?
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703638
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewНадо же, в первый раз ты что то по делу сказал
нет, ты просто впервые попытался прочитать написанное

Eugene NewМне разжевать как ссылку на Fragment получить прямо при его создании?
а мне разжевать тебе про то, что Activity ничего не должен знать о том, что там во фрагменте? и что у фрагмента есть свой цикл жизни и по-этому он сам должен разруливать свои вьюхи? Тоже самое касается контейнеров типа ViewGroup.

к чему это я? к тому что задача генерации подобного или любого другого кода в дизайнере бесполезна, потому что у нас тех же Fragment-ов может быть 5 штук и они могут использоваться на 2-3 Activity, так что генерировать весь этот шум в каждой из них не просто муторно но и архитектурно не правильно.

но я все же хочу вернутся к твоему тезису о нечитаемости генерируемого по аннотациям кода. приведенный выше код сгенерирован автоматически. что там нечитаемо и чем твоя поделка по-твоему лучше?
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703645
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewПроблема в том, что читая исходник ты не видишь всего исходного кода сразу и что сгенерировано может быть как и нормально, так и ужасно
ты не понял, ВЕСЬ код в этом классе сгенерирован на 100%, тут нет прикладного кода. его единственная задача избавить прикладной код от всей это лапши видa findByView, onOptionsItemSelected и много чего еще

Eugene NewПочему, кстати, в твоем примере макрос override не раскрылся?
что значит не раскрылся?
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703654
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эмм, override даже в С++11 добавили.

Чувствуется запах нафталина.
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703660
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

[quote]что значит не раскрылся? [/quote
@override - не конструкция языка, а аннотация. Какого он делает в "полностью раскрытом' коде? Компилятор по идее его не понимает, т. к. это не конструкция языка. Значит вместо @override компилятору подсовывают что то другое. Где оно?
Или все-таки @override это конструкция языка, понятная компилятору?

у фрагмента есть свой цикл жизни и по-этому он сам должен разруливать свои вьюхи?

Объявления объекта L можно и внутрь фрагмента засунуть и инициализировать его при создании фрагмента.

Конечно, мой класс делает не больно то много, всего лишь избавляет от явного объявления полей и их инициализации. При этом генерируя минимум кода - только объявление класса с этими самыми полями, т. к. использует RTTI.

ты не понял, ВЕСЬ код в этом классе сгенерирован на 100%, тут нет прикладного кода

Да, и я правду не понял сразу. Но тут как раз выходит проблема с гибкостью с фрагментами или нет? Непонятно, нужно ли обязательно наследование от этого _Activity.
Я напишу критику этого подхода чуть попозже..
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703674
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭмм, override даже в С++11 добавили.

Зачем ты что то пишешь, если вообще нихрена не понимаешь, о чем идет речь?
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703685
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewИли все-таки @override
это необязательная аннотация, которая просто позволяет компилятору проверить действительно ли мы делаем то, что думаем, что делаем - например если мы ошиблись в названии метода и/или кол-ве/типе параметров. кроме того она имеет чисто информативный смысл

Eugene NewОбъявления объекта L можно и внутрь фрагмента засунуть и инициализировать его при создании фрагментаможно. и мы получим 100% аналог androidannotations или butterknife, сделанный на базе convention over configuration и без использования annotation processing (официального механизма для кодогенерации). Так и в чем профит? Если бы ты по-человечески спросил, как избежать вот этого boilerplate, я тебе сразу 3-4 способа и назвал бы, смысл было истерить и сраться?

Eugene NewНо тут как раз выходит проблема с гибкостью с фрагментами или нет?
нет, эти аннотации (и много всяких других) валидны для многих элементов, в том числе для "чистых" классов не наследующих ни фрагменты, ни activity

Eugene NewНепонятно, нужно ли обязательно наследование от этого _Activity
только при запуске Activity. т.е. прикладной код пишется в MyActivity, MyFragment, MyViewGroup и т.д., а в манифесте или при старте указывается MyActivity_, для создания фрагмента используется MyFragment_ и т.д.

Eugene NewЯ напишу критику этого подхода чуть попозже
пиши
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703739
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

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

Что оно делает, я знаю. Механизм работы до конца не понятен. Почему то это не сделано частью языка, а названо аннотацией, которая реализована через public @interface Override, а как это раскрывается дальше уже непонятно.

мы получим 100% аналог androidannotations или butterknife

Совсем разные вещи.

сделанный на базе convention over configuration

Файлы с определениями класса должны генерироваться визуальным редактором и записываться в каталог src проекта или может в отдельный подкаталог.

Так и в чем профит?

Не писать руками объявления и инициализацию полей-вью. Хотя можно это сделать и руками, если дизайнера форм нет. Объем генерируемых файлов минимален, механизм работы (вызов одной функции) прост.
Не скажу, что это прямо великий профит, т. к. обычно на окне контролов мало (о чем я сказал сразу).

? Если бы ты по-человечески спросил

Я не только спросил, но четко сформулировал задачу. По большому счету - как упражнение.

только при запуске Activity. т.е. прикладной код пишется в MyActivity, MyFragment, MyViewGroup и т.д., а в манифесте или при старте указывается MyActivity_, для создания фрагмента используется MyFragment_

Хитрозамудрено. Еще и манифест менять. Слишком неочевидно для решаемой задачи.
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703756
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewМеханизм работы до конца не понятен.
механизм работы аннотаций типа NotNull/Nullable понятен? позволяет выявить ошибки на этапе разработки в отсутствующих или излишних проверках на null в параметрах методов, значениях полей, результатах возврата функций. Так и в случае override это просто маркер. Все аннотации - это просто метаданные, не имеющие прямого эффекта на элементы, для которых они объявлены. Они несут некую информацию для компилятора и массы других механизмов типа кодо-генераторов, сериализаторов, дейплойеров и т.д. и т.п.

Eugene Newа как это раскрывается дальше уже непонятно.
никак не раскрывается - это метаданные. ты можешь получим к ним доступ (в зависимости от декларации), на этапе компиляции или в рантайме и что-то по этому поводу сделать. Например

Код: java
1.
2.
3.
4.
5.
class MyObject {

 @JsonProperty("myNameIsFriday")
 public String myProperty;
}


так понятно? в данном случае аннотация JsonProperty несет информацию для сериализатора/десериализатора json как сериализовать и де-сериализовать поле myProperty


Eugene Newмы получим 100% аналог androidannotations или butterknife
Совсем разные вещи.
полный аналог, но у меня нет настроения на спор в стиле да/нет/да/нет. и твой код и описанные инструменты имеют целью избавить разработчика от рутинной лапши. оба делают это одним и тем же способом, только вышеозначенные элементы через кодогенерацию и наследование, а ты - через рефлексию и отдельный класс, содержащий все элементы. я могу переписать твой пример на androidannotations, подумай еще раз, на сколько это аналог твоего кода

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
@EBean
class MyLayout {

  @ViewById
  Text myText;

  @ViewById
  Button myButton;
}

@EActivity(R.layout.my_layout)
class MyActivity extends Activity {

   @Bean
   MyLayout myLayout;

  @AfterViews
  void setup() {
     myLayout.text.setText("Hello World");
     myLayout.myButton.setOnClickListener(view -> Toast.create(MyActivity.this, "Hello World", Toast.LONG).show());
  }

}



Eugene NewХитрозамудрено. Еще и манифест менять
нормально. "менять" нужно только если проект мигрируется на подобное. иначе мы изначально пишем наследника.

Eugene NewСлишком неочевидно для решаемой задачи
Любые инструменты приходится изучать и правильно применять. Очень часто ничего из вышеперечисленного вовсе не надо, с помощью DataBinding можно решить очень много тривиальных задач без обеспечения доступа к элементам layout. Собственно DataBinding, это то - что изначально должно было быть в инструментарии андроида, но к сожалению появилось довольно поздно.
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703757
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, попробуйте с помощью аннотаций повторить генерацию такого же файла, как я привел в примере. Если сумеете в аннотации прочитать xml-файл и атрибуты tag из него, то выйдет, а если нет - то скорее всего не выйдет. Т. к. имена полей, которые нужно сгенерировать, находятся в атрибутах xml-файла и больше нигде - писать их в исходном коде при вызове аннотации не допускается по условиям задачи.
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703785
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewЕсли сумеете в аннотации прочитать xml-файл и атрибуты tag из него
функционала из коробки для генерации полей по layout нет в androidannotations, зато такой функционал есть в DataBinding

вот кусочек реально сгенеренного файла (кол-во полей я сократил)
Код: 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.
@SuppressWarnings("unchecked")
@javax.annotation.Generated("Android Data Binding")
public class Camera360Binding extends android.databinding.ViewDataBinding implements android.databinding.generated.callback.OnClickListener.Listener, android.databinding.generated.callback.OnCheckedChangeListener.Listener {

    @Nullable
    private static final android.databinding.ViewDataBinding.IncludedLayouts sIncludes;
    @Nullable
    private static final android.util.SparseIntArray sViewsWithIds;
    static {
        sIncludes = null;
        sViewsWithIds = null;
    }
    // views
    @NonNull
    public final widget.cards.LinearCardLayout cardLayout;
    @NonNull
    public final android.widget.LinearLayout confirmationControls;
    @NonNull
    public final opensphericalcamera.view.GLPhotoView imageView;
    @Nullable
    private final android.view.View.OnClickListener mCallback2;
    @Nullable
    private final android.widget.CompoundButton.OnCheckedChangeListener mCallback1;
    @Nullable
    private final android.view.View.OnClickListener mCallback4;
    @Nullable
    private final android.view.View.OnClickListener mCallback3;

public Camera360Binding(@NonNull android.databinding.DataBindingComponent bindingComponent, @NonNull View root) {
        super(bindingComponent, root, 8);
        final Object[] bindings = mapBindings(bindingComponent, root, 15, sIncludes, sViewsWithIds);
        this.cardLayout = (android.widget.cards.LinearCardLayout) bindings[0];
        this.cardLayout.setTag(null);
        this.confirmationControls = (android.widget.LinearLayout) bindings[12];
        this.confirmationControls.setTag(null);
        this.imageView = (opensphericalcamera.view.GLPhotoView) bindings[5];
        this.imageView.setTag(null);
        this.infos = (android.widget.LinearLayout) bindings[6];
        this.infos.setTag(null);
        this.livePreview = (opensphericalcamera.view.MJpegViewV2) bindings[4];
        this.livePreview.setTag(null);
        this.mboundView1 = (android.widget.TextView) bindings[1];
        this.mboundView1.setTag(null);
        this.mboundView10 = (android.widget.Switch) bindings[10];
        this.mboundView10.setTag(null);
        this.mboundView13 = (android.support.v7.widget.AppCompatImageView) bindings[13];
        this.mboundView13.setTag(null);
        this.mboundView14 = (android.support.v7.widget.AppCompatImageView) bindings[14];
        this.mboundView14.setTag(null);
        this.mboundView2 = (android.widget.ProgressBar) bindings[2];
        this.mboundView2.setTag(null);
        this.mboundView3 = (android.widget.ProgressBar) bindings[3];
        this.mboundView3.setTag(null);
        this.mboundView7 = (android.widget.TextView) bindings[7];
        this.mboundView7.setTag(null);
        this.mboundView8 = (android.widget.TextView) bindings[8];
        this.mboundView8.setTag(null);
        this.mboundView9 = (android.widget.LinearLayout) bindings[9];
        this.mboundView9.setTag(null);
        this.shutterButton = (android.widget.ImageView) bindings[11];
        this.shutterButton.setTag(null);
        setRootTag(root);
        // listeners
        mCallback2 = new android.databinding.generated.callback.OnClickListener(this, 2);
        mCallback1 = new android.databinding.generated.callback.OnCheckedChangeListener(this, 1);
        mCallback4 = new android.databinding.generated.callback.OnClickListener(this, 4);
        mCallback3 = new android.databinding.generated.callback.OnClickListener(this, 3);
        invalidateAll();
    }



если бы подобный функционал потребовался мне в androidannotations, я бы это сделал в виде плагина для оных, благо java annotation processing поддерживает множественные проходы. однако я не вижу особой пользы в подобной фиче по следующим соображениям (навскидку)
- все, что нам как правило нужно, это установка свойств и реакция на события. это решается лучше и элегантней с помощью databinding, нам не нужен прямой доступ к контролам, нам достаточно менять значения модели
- если нам нужны нестандартные манипуляции с парой контролов (например сложная логика перемещения фокуса или еще какой изврат), то игра не стоит свеч ради пары-то контролов
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703799
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewавторЭмм, override даже в С++11 добавили.

Зачем ты что то пишешь, если вообще нихрена не понимаешь, о чем идет речь?
Я понимаю, что оверрайд имеет чисто декоративный[предупредительный] смысл в C++/D/C#/ Java

А ты почему то требуешь "раскрыть макрос" =)
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703833
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

зато такой функционал есть в DataBinding

а что для этого программисту надо написать в исходном коде? Определение аннотации или как это правильно называется. Короче, вызов этого хозяйства.
Чтобы мне не гадать. Насколько я понял, определение класса надо писать вручную. Потом ЕЩЕ раз пишем названия его полей в атрибутах в xml. Понятно, что раз определение класса уже есть, а атрибуты загружены во время выполнения, то мы сможем его инициализировать, примерно это я и вижу в реализации. Загвоздка в том, чтобы имена контролов написать РОВНО один раз и сгенерировать класс, не описывая его вручную и чтобы к полям класса было корректное обращение с автозаполнением и прочими плюшками в момент редактирования кода.

это установка свойств и реакция на события.

Открыть по нажатию на кнопку новое Асtivity или запустить задачу сможет?

Siemargl
Я понимаю, что оверрайд имеет чисто декоративный[предупредительный] смысл в C++/D/C#/ Java

Неправильно понимаешь относительно C++ и С#.
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39703837
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene Newа что для этого программисту надо написать в исходном коде?
погули официальный туториал, у меня рабочий день закончен , так что все вопросы и примеры завтра ;) .

можно использовать databinding + androidannotations, что позволяет еще уменьшить кол-во ручного кода ( позволяет убрать большинство инициализаций из исходных примеров databinding).

Eugene NewНасколько я понял, определение класса надо писать вручную
вручную ты пишешь модель данных и binding expressions в layout (с автозаполнением), плюс в layout в спец секции указываешь тип модели данных (для автозаполнения и генерации методов доступа), в xml какие свойства контролов на какие свойства модели байндить, плюс события. для всех контролов с id автоматом генерятся поля как в примере выше.


Eugene NewЗагвоздка в том, чтобы имена контролов написать РОВНО один раз и сгенерировать классэто как раз работает (если у view есть id, на сколько я помню) и это имхо максимально бесполезно, потому что как я уже писал выше в 99 случаях из 100 мы байндим какой-то текст на какаую-то переменную, или видимость/enabled/disabled плюс реагируем на нажатия какой-то кнопки. Для этого сами контролы нам не нужны.

Eugene Newчтобы к полям класса было корректное обращение с автозаполнением
работает

Eugene NewОткрыть по нажатию на кнопку новое Асtivity или запустить задачу сможет?
естественно
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39704009
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

Вероятно, databinding позволяет решать определенные задачи. Но мне бы хотелось увидеть решение своей задачи, не чужой. Ручками объявление короткого класса я и сейчас могу написать и дальше вызвать свою функцию. Но без его генерации придется два раза писать названия полей - в самом классе и в xml. Мало того, что писать 2 раза одно и то же, и менять потом в 2-х местах в случае необходимости. Можно и ошибиться и компилятор ошибку на этапе компиляции не выявит.

То же касается использования databinding.

https://stackoverflow.com/questions/41938671/databinding-button-onclick-not-working

Код: sql
1.
android:onClick="@{(v) -> callback.onClick(v)}"



Это примитивный плохой подход, потому что заставляет писать сложные выражения со скобочками в атрибутах - а в строках атрибутов компилятор не проводит никакого синтаксического анализа. В которых легко ошибиться и ошибка, как явствует из вопроса по ссылке ошибка вообще не будет выявлена. В данном случае можно было бы написать "onclick", который работает без всякого databindg и которым никто не пользуется, т. к. это неудобно.

Код: java
1.
2.
3.
4.
5.
6.
   actionCallBack = new ActionCallBack() {

        @Override
        public void onClick(View view) {
            System.out.println("Call onclick method *****");
        }



И чем это лучше прямого назначения анонимного онкликлистенера, при котором не надо ничего писать в атрибутах? Текста столько же.
Вижу усложнение вообще без выгоды.
Повторяюсь, для чего то другого databinding может быть хорош. Но для назначения обработчиков пока что вижу только лишние сложности вообще без выгоды.
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39704107
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewЭто примитивный плохой подход, потому что заставляет писать сложные выражения со скобочками в атрибутахэто не совсем так, допускается запись вида model::onClick или как в примере callback:onClick . но автоподстановка именно для событий действительно не работает

Eugene Newа в строках атрибутов компилятор не проводит никакого синтаксического анализа.
это тоже не так, если референцируемый метод не существует, компилятор выдаст ошибку

android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Listener class android.view.View.OnClickListener with method onClick did not match signature of any method model::onClick1


в приведенном тобою примере со stackoverflow ошибка была в другом

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

Eugene NewИ чем это лучше прямого назначения анонимного онкликлистенера, при котором не надо ничего писать в атрибутах? Текста столько же.
Вижу усложнение вообще без выгоды.пример неудачный, у меня есть лучше

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@EActivity(R.layout.activity_main)
@DataBound
public class MainActivity extends AppCompatActivity
{
	@BindingObject
	ActivityMainBinding binding;

	@AfterViews
	void setup() {
		binding.setModel(new MainModel());

		//прямой доступ к элементу
		binding.edit.addTextChangedListener(this);
	}
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class MainModel
{

	public ObservableField<String> text = new ObservableField<>();
	public ObservableBoolean isEditEnabled = new ObservableBoolean(true);

	public MainModel()
	{
	}

	

	public void onClick(View view) {
		text.set("Test");
		isEditEnabled.set(!isEditEnabled.get());
	}
}



Код: 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.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto">


    <data>
        <variable name="model" type="com.example.testandroidapp.MainModel"/>
    </data>

    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MainActivity">

        <TextView android:id="@+id/text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@{model.text}"/>


        <Button android:id="@+id/myButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/text"
                android:text="click me"
                android:onClick="@{model::onClick}"/>

        <EditText android:id="@+id/edit"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_below="@id/myButton"
                  android:enabled="@{model.isEditEnabled}"/>

    </RelativeLayout>

</layout>
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39704259
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglА ты почему то требуешь "раскрыть макрос" =)
Он со времён hello world не видел других языков, кроме си. А в сях есть так называемые команды препроцессора, которые как раз можно назвать макросами, которые компилятор раскрывает и запускает. Вот он и бредит знакомыми образами, разглядывая новый для него игрушки.
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39704436
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555,

говори за себя, что ты видел и что нет. И прекрати здесь флудить. НИ ОДНОГО содержательного сообщения от тебя в данной теме. Вообще ни слова по делу.
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39704454
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

ок, так лучше. Способ ссылаться на модель из разметки на xml.
Но все таки такое использование создает определенную кашу. Например, что здесь модель? Модель из MVC? Тогда она не должна управлять интерфейсом напрямую - вызывать другие окошки из нее некомильфо. Требуются магические слова с @ расставленные в определенных местах. В редакторе атрибута не работает автодополнение. Много текста. Избыточно для решения моей задачи. И т. п.

Я придерживаюсь принципа (придуманного не мной), что код должен быть максимально читаемым, насколько это возможно. То, что сделал я - объявление класса, нигде не спрятанное и его явная инициализация вызовом функции. Сразу ясно откуда что берется. ЧИТАТЬ и понять что происходит удобнее и легче.

Можно, конечно, и в databinding разобраться, понять что означают магические слова и почему они ставятся именно там, где ставяться и как писать атрибуты, на что там ссылаться можно, а на что нет. Но это сложнее - и нужно только при решении адекватной по сложности задачи, решение которой другим способом будет еще сложнее.

Тем не менее благодарю за полезную информацию, которую вы начиная с определенного момента начали выдавать.
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39704473
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewНапример, что здесь модель? Модель из MVC?
на твое усмотрение, но я бы сказал, что это скорее МV(P) . не спрашивай, почему я обозвал класс моделью :)

Eugene NewТребуются магические слова с @ расставленные в определенных местах
не требуются. как я писал выше - лично я использую databinding вместе с androidannotations, что позволяет упростить код. можешь не использовать, а писать как в оф. примерах. а вообще в яве магические слова на каждом шагу, это ты еще, видимо spring не видел.

Eugene NewВ редакторе атрибута не работает автодополнение
для свойств работает, для событий нет

Eugene NewИзбыточно для решения моей задачи
дело хозяйское. для примитивных "форм" лично мне хватает только androidannotations, databinding юзаю когда у интерфейса много состояний.

Eugene Newкод должен быть максимально читаемым
с этим не поспоришь, но это очень слабо натягивается на случай знакомства с новым инструментом т.к. понимание читаемости становится очень субъективным. например, что более читаемо - явное инстанциирование кучи объектов или декларативное создание их же с помощью depedency injection? как по мне, так второе - более читаемо, но требует более высокого порога вхождения и некоторого понимания предмета, т.к. человеку абсолютно не знакомому с концепцией абсолютно не понятно откуда берутся все эти объекты. ему куча строк с new будет понятней.

Eugene NewМожно, конечно, и в databinding разобраться, понять что означают магические словав данном примере магические слова никак не связаны с databinding. в любом случае за каждым из них стоит довольно простая концепция, более того, если тебе показать более простой пример, то ты почти наверняка и так поймешь, что здесь происходит, не будучи знакомым с инструментом. например

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void myMethod() {
    doBackgroundWork("hello", 42);
}

@Background
void someBackgroundWork(String aParam, long anotherParam) {
    onTaskFinished(result);
}

@UiThread
void onTaskFinished(String result) {
    textView.setText(result);
}
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39709115
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewЗачем мне Eclipse? Хочу уйти от gradle. Дело не только в сложности этого сборщика и ужасно плохой работе
шта ?

плохой работе, мда...
уж в разы лучше ант.

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


и в чем сложность установки Андроид Студио ?
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39709126
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джибсшта ?
YouTube Video
...
Рейтинг: 0 / 0
Почему заглох Eclipse Andmore?
    #39709159
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaДжибсшта ?
YouTube Video
...
Рейтинг: 0 / 0
25 сообщений из 75, страница 3 из 3
Форумы / Android [игнор отключен] [закрыт для гостей] / Почему заглох Eclipse Andmore?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]