android


listview refresh in android databinding


I am working with one of application using android MVVM architecture with databinding concepts.
The problem is when i am updating the textview of the xml the entire view gets updated.so listview gets refreshed and scroll to top position.i want to restrict the listview when onItem click event occurs.
Following xml contains listview.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="kenoservicesVM"
type="com.naushad.kenocustomer.landing.KenoServicesVM" />
<variable
name="kenoservice"
type="com.naushad.kenocustomer.landing.KenoService" />
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#color/nliveo_transparent"
android:paddingEnd="20sp"
android:paddingStart="20sp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:text="Total"
android:textColor="#color/white" />
<ScrollView
android:id="#+id/SCROLLER_ID"
android:layout_width="fill_parent"
android:layout_height="160sp"
android:layout_margin="0sp"
android:background="#color/nliveo_transparent"
android:fillViewport="true"
android:scrollbars="none">
<ListView
android:id="#+id/lstServices"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onItemClick="#{kenoservicesVM::onItemClick}"
bind:items="#{kenoservicesVM.mList}">
</ListView>
<!--android:onItemClick="#{kenoservicesVM::onItemClick}"-->
</ScrollView>
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="2">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:text="Total"
android:textColor="#color/white" />
<TextView
android:id="#+id/totalCharges"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:paddingRight="10dp"
android:paddingTop="10dp"
android:textColor="#color/white" />
<!--android:text="#{kenoservicesVM.totalPrice ?? #string/_0_aed}"-->
</LinearLayout>
<RelativeLayout
android:id="#+id/your_btn_id"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="#+id/bgNext"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginBottom="5dip"
android:layout_marginTop="15dip"
android:alpha="0.5"
android:src="#drawable/blue_round_light_bg" />
<Button
android:id="#+id/btn_add_card"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_marginBottom="5dip"
android:layout_marginTop="15dip"
android:background="#drawable/blue_next_bg" />
</RelativeLayout>
</LinearLayout>
</FrameLayout>
</layout>
Following viewmodel class indicates the viewmodel which i have used in xml.
public class KenoServicesVM extends BaseObservable {
public ObservableArrayList<KenoService> mList = new ObservableArrayList<>();
private Context mContext;
#NonNull
private String mTotalPrice;
int selectedServiceCharges=0;
private int bar;
public ObservableField<String> price;
Handler handler;
public KenoServicesVM(List<KenoService> list, Context mContext) {
mList.addAll(list);
this.mContext = mContext;
}
#NonNull
public String getTotalPrice() {
return mTotalPrice;
}
public void setTotalPrice(#NonNull String totalPrice) {
this.mTotalPrice = totalPrice;
// notifyPropertyChanged(BR.kenoservicesVM);
// notifyPropertyChanged(BR.totalPrice);
notifyChange();
// notifyPropertyChanged(BR.kenoservicesVM);
}
#BindingAdapter("bind:items")
public static void bindList(ListView view, ObservableArrayList<KenoService> list) {
CustomListAdapter adapter = new CustomListAdapter(list);
view.setAdapter(adapter);
}
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
if(position == 0) return;
if(mList.get(position).getSelected())
mList.get(position).setSelected(false);
else
mList.get(position).setSelected(true);
for (int i=0 ;i<mList.size();i++){
KenoService keno = mList.get(i);
if(keno.getSelected())
selectedServiceCharges +=Integer.parseInt(keno.getKenoServiceCharge());
}
/*handler = new Handler();
Runnable runnable = new Runnable() {
#Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
#Override
public void run() {
price = new ObservableField<>(selectedServiceCharges +" AED");
}
});
}
};
new Thread(runnable).start();*/
setTotalPrice(selectedServiceCharges +" AED");
// dialogueServicesBinding.totalCharges.setText(selectedServiceCharges +" AED");
// mTotalPrice = selectedServiceCharges +" AED";
// ModuleManager.startActivity(ModuleManager.DISPATCH_MODULE, DispatchModule.STATE_FORGOTPASSWORD, (Activity) mContext);
}
}
I am new to android databinding concepts.Please help me to resolve this issue when i click on listview item and refreshing the view.Thanks in advance.
You need to use Bindable for your properties.
#NonNull
#Bindable
public String getTotalPrice() {
return mTotalPrice;
}
This will create the BR.totalPrice field and you'll be able to call
notifyPropertyChanged(BR.totalPrice);
and the text should update with it
android:text="#{kenoservicesVM.totalPrice ?? #string/_0_aed}"
Additionally #NonNull is a promise you might not be able to hold. Consider adding a default value.
Sorry I can't leave a comment due to reputation but I have bumped into one of the similar problem before, you can pass mList and position in your setTotalPrice methods and then called notifyItemChanged instead of notifyChange, this way it will update only the item at the specified position in your list
public void setTotalPrice(#NonNull String totalPrice, int position, ObservableArrayList<KenoService> mList, TextView totalCharges) {
this.mTotalPrice = totalPrice;
mList.notifyItemChanged(position);
totalCharges.setText(//whatever u need here);
totalCharges.invalidate();
}

Related Links

Tabhost number of tabwidget
How I can make a custom clickeable area?
How to add onclick dynamically to arraylist
Using Hardware Device but cannot find installed app
Full screen changes normal design
How to get the Android device's physical orientation in degrees.
Inserting null value for BLOB datatype
Android PDF SDK : Getting selected text positioning/Highlighting text based on position
Google Maps Android API Authorization failure - has this service changed in the last few months?
Storing a file on Internal And External SdCard
content of the adapter has changed but ListView did not receive a notification
getLastLocation() from LocationClient always returns null [duplicate]
Android Ksopa2 Result
Navigation Drawer Implementation
setting Image as background in Widget
General Timer Class in Android with callback fucntion

Categories

HOME
android
batch-file
phpword
gridview
c++11
phpmyadmin
depth
pascal
battery
pclxl
database-normalization
soa
simulink
tail
interpolation
retrofit2
qpython
sendgrid-api-v3
augeas
little-proxy
watson-conversation
filechannel
pybossa
searchview
atlassian-stash
gulp-watch
jquery-callback
oculus
winpe
postback
mockjax
dsx-desktop
modalviewcontroller
jwplayer6
zoomify
openalpr
git-rewrite-history
z-notation
metawidget
mongoose-schema
dbnull
logback-groovy
phpdbg
clarifai
facebook-pixel
bluez
google-cse
oracleclient
ngmaterial
django-1.10
rmongo
custom-lists
redbeard-ios
neon
upx
createprocess
exim4
concept-insights
crouton-os
inf
oracle-spatial
fuelcms
rubaxa-sortable
.bash-profile
viola-jones
liquid-layout
keyup
showdialog
pseudo-class
sip-server
deform
insight.database
named-parameters
xml-dsig
grails-plugin-rabbitmq
square-bracket
mt4j
kendo-dataviz
dtmf
cocoalibspotify-2.0
cnf
bjyauthorize
curb
adobe-media-server
correlated-subquery
apache-whirr
multiplexing
oracle-enterprise-linux
cgimage
gobject-introspection
codebase
luajava
vs-android
web-garden
pos-for-.net
scrollbars
echo3
lobo-cobra
wordprocessingml
cardspace
commercial-application
great-circle

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App