Handles multiple display states for data-centric views
- Content state; shows the inner content of the View (as defined in XML)
- Loading state; shows a Loading state (as specified either via the
loadingLayout
attribute, or the default layout (res/layout/msv__loading.xml
)
The following shows examples (using default layouts) for Loading, General Error, Network Error, and the Content states (where we've made the "Hello World" the content) in respective order.
- For whatever
View
you want to switch out withMultiStateView
, wrap theView
in aMultiStateView
node. - In code, get your reference to the child of
MultiStateView
viaMultiStateView#getContentView()
and cast that value as needed. There's no good reason to put anandroid:id
on the childView
.
Example
- Assuming you're starting with:
<LinearLayout
xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="match_parent" />
</LinearLayout>
- You should end up with something like:
<LinearLayout
xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.meetme.android.multistateview.MultiStateView
android:id="@+id/list_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="fill_parent"
android:layout_height="match_parent" />
</com.meetme.android.multistateview.MultiStateView>
</LinearLayout>
Example Notes
0. android:id="@+id/list"
was moved from the ListView
to the MultiStateView
0. It was also renamed to list_container
to note that it now is the parent of the ListView
0. Any references in code should now use MultiStateView#getContentView()
casted to ListView
to reference the ListView
child. There's no good reason to put an id
on the ListView
. See below.
- In code,
ListView list = (ListView) findViewById(R.id.list);
- Becomes
MultiStateView container = (MultiStateView) findViewById(R.id.list_container);
ListView list = (ListView) container.getContentView();
- To control the state of the
MultiStateView
, use theMultiStateView#setState(State)
method.
container.setState(State.LOADING);
- By default, "Loading" indication uses the loading layout provided in the library (
res/layout/msv__loading.xml
). To customize, you can add the custom attributemsvLoadingLayout
to theMultiStateView
in XML with a reference to the layout to inflate.
Apache 2.0
Copyright 2013 MeetMe, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
To make contributions, fork this repository, commit your changes, and submit a pull request.