MvvMCross bind to <include> in android layout - binding

Is it possible to bind an object X to the include tag, so that the context of binding in the included layout is X? I want to use a layout multiple times, but not in a list.
MainLayout.xml
...
<include
android:id="#+id/btnDealerMap"
android:layout_width="64dp"
android:layout_height="64dp"
android:visibility="gone"
layout="#layout/ServiceBarButtonPhone"
local:MvxBind="??? X" />
...
ServiceBarButtonPhone.xml
Title and Text are properties of X.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/..."
android:layout_width="96dp"
android:layout_height="96dp">
<TextView
...
android:id="#+id/txtTitle"
local:MvxBind="Text Title" />
<TextView
...
android:id="#+id/txtText"
local:MvxBind="Text Text" />
</RelativeLayout>

There's nothing to bind on the outside of the include - but you can put normal binding on the inside of the file - it then just gets included in at compile time. See one example in: https://github.com/MvvmCross/MvvmCross-Tutorials/blob/master/ApiExamples/ApiExamples.Droid/Resources/Layout/Test_If.axml
If instead you want an inner 'layout' with its own DataContext, try MvxView - for an example of that see MvxFrameControl - as used in part of N=26 - see https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/blob/b405eef7dddf4d65b00116e142855653eae9f06b/N-26-Fraggle/Rock.Droid/Resources/Layout/FirstView.axml

Related

How to fix " Element ....is not allowed " error in layout "activity_main.xml" file

I have created a new android project using Android Studio 3.5.1 using the "Basic Activity" template. But could not get the Design/Text tab rather error messages "Element ...is not allowed here".
The elements are highlighted with red. I do appreciate any help.
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="#style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="#+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="#style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>
<include layout="#layout/content_main"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
I have settled it by:
1- Delete "wrapper" folder under ...C:\Users[myUserAcctName].gradle
2- Reload the project and let the Gradle's sync finish (it took 34 minutes).
Then went perfect.
Thanks for those considering an answer.

Xamairin forms : Android.Views.InflateException: <Timeout exceeded getting exception details>

Research a lot about this issue and found the same question, which doesn't solve my problem. so starting a new question.
Xamarin Android: Android.Views.InflateException - Error when loading Layout
Getting Xamairin forms : Android.Views.InflateException: Timeout exceeded getting exception details when loading layout.
Main.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFCDD2"
android:orientation="vertical">
<android.support.design.widget.TextInputLayout
android:id="#+id/input_layout_name"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="#+id/input_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:hint="#string/hint_name" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="#+id/input_layout_email"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="#+id/input_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="#string/hint_email" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="#+id/input_layout_password"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="#+id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:hint="#string/hint_password" />
</android.support.design.widget.TextInputLayout>
<Button
android:id="#+id/btn_signup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="#string/btn_sign_up"
android:background="#color/colorPrimary"
android:layout_marginTop="40dp"
android:textColor="#android:color/white" />
</LinearLayout>
I have not used layout:width and layout:height properties in my axml and only using an icon having 4kb size.
Please suggest a solution for this issue, thanks in advance...
Getting Xamairin forms : Android.Views.InflateException: Timeout exceeded getting exception details when loading layout.
There are two things needs to be confirmed before using TextInputLayout:
Please make sure, Xamarin.Android.Support.Design lib is correctly referenced in your Xamarin.Android project. If you are using Xamarin.Forms, it should be referenced by default.
Please make sure the Activity is of type Android.Support.V7.App.AppCompatActivity.
If none of the above things help, please provide a basic demo that can reproduce the problem.
Update:
Upon testing on the project you shared. I found you need to use a Theme.AppCompat theme for your activity, you can do that by following below steps:
Create a styles.xml file under Resources\values\ folder with below codes:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
</resources>
In MainActivity.cs define the Activity attribute to leverage AppTheme like this:
[Activity(Label = "DinexFeedback", MainLauncher = true, Icon = "#drawable/icon",Theme ="#style/AppTheme")]
public class MainActivity : Android.Support.V7.App.AppCompatActivity
{
...
Then the project will run fine.
Unhandled Exception: Android.Views.InflateException:
Make sure the necessary nuget package installed in visual studio.
I used card view in my project, i got this issue becoz i didn't install Xamarin.Android.Support.cardview.
so we should install all support nuget package in order to support all widgets here i use card view.
click on project -> Manage Nuget-> check out the installed pakages, if the package were not installed just search the particular package and then download it.
updated on 10/12/2018
check your layout whether all the layout fields are started with capital letter. for ex : In android we used in small letter but In c# we should use otherwise it throws the inflate view exception.

Bind to current binding context?

I have an item template which is to display a List<IGrouping<string, string>>. In order to do this I need to bind an ItemsSource to the current binding context, in WPF I would do it something like {Binding DataContext} how would I do this in MvvmCross?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="Text Key"/> !**IGrouping.Key**!
<Mvx.MvxLinearLayout
android:id="#+id/items"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
local:MvxBind="ItemsSource DataContext" !**This doesn't work, should bind IGrouping as IEnumerable<string>**!
local:MvxItemTemplate="#layout/item_myitem"/>
</LinearLayout>
You can bind to the current source by providing an empty path.
To do this, I find the best syntax is just to use "."
<Mvx.MvxLinearLayout
android:id="#+id/items"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
local:MvxBind="ItemsSource ."
local:MvxItemTemplate="#layout/item_myitem"/>
However, some people prefer using an empty string - although I find this a bit less readable
<Mvx.MvxLinearLayout
android:id="#+id/items"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
local:MvxBind="ItemsSource"
local:MvxItemTemplate="#layout/item_myitem"/>
This option - and lots more besides - is discussed in the data-binding article -
https://github.com/slodge/MvvmCross/wiki/Databinding
(Note: empty string binding was broken in nuget v3.0.9 but should be fixed in v3.0.10 - see Error when making bind ObservableCollection<string> for a MvxListView)

TYPO3 and locallang.xml texts being displayed as "Array" instead of text inside fluid template

I am having some problems regarding the use of locallang.xml
I have this:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
<meta type="array">
<type>module</type>
<description>Language labels for BE plugin</description>
</meta>
<data type="array">
<languageKey index="default" type="array">
<label index="mlang_testtext">This is a test text to be translated</label>
</languageKey>
<languageKey index="es" type="array">
<label index="mlang_testtext">Esto es un texto de prueba para ser traducido</label>
</languageKey>
</data>
</T3locallang>
Inside fluid template, I can use
<f:translate key="mlang_testtext" />
But If I try
{LLL:mlang_testtext}
All I get is the text Array
Also, if I try both of them inside a partial template, neither of those ones works.
EDIT: There are places where I can't use <f:translate .../> for example in button labels so I need the other form working too
What am I missing?
Check /typo3/sysext/fluid/Classes/ViewHelpers/TranslateViewHelper.php for sample of correct inline usage, so for an example setting your label as a default value of the input field would look like this:
<f:form.textfield name="myTextBox" value="{f:translate(key: 'mlang_testtext')}" />

Monodroid - How to include layouts?

I am looking at android documentation and if I want to use include and merge.
So I opened up eclipse and got it to extract some of the code out and it made in my layout this
<include layout="#layout/progressbar" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
and another file with
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:text="Loading..." android:layout_height="wrap_content" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="#+id/lblLoading" android:layout_marginLeft="180dp" android:layout_marginTop="240dp"></TextView>
<ProgressBar android:id="#+id/progBar" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginLeft="130dp" android:layout_marginTop="230dp"></ProgressBar>
</merge>
Yet when I try to do this in monodroid I get errors saying it can't find merge and include.
Do you have "warnings as errors" enabled? For code completion, Mono for Android includes an XSD for .axml files, and the XSD doesn't specify <include/> or <merge/>, and thus Visual Studio will generate a warning when those are used. Mono for Android doesn't care about them, though, and passes them through to aapt.
It would be useful if you could provide the exact error message.
try using
<ProgressBar android:progress.....
And continue, its more along the lines of messing around with different options.

Resources