radzio / android-data-binding-recyclerview Goto Github PK
View Code? Open in Web Editor NEWUsing Recyclerview with the new Android Data Binding framework
License: Apache License 2.0
Using Recyclerview with the new Android Data Binding framework
License: Apache License 2.0
Where can I found this binding lib. jar or import it in Eclipse to use it ??
Please write a small example.
can you plz provide sample code for compositeItemBinder for multiple-view Type in recyclerview
how to use composite Binder or how to set app:items in recyclerview if we have multiple items layout
How can we detect, if a "firstName" or "lastName" is clicked?
So generally: How can we detect which item has been clicked within a row item?
This should consider CompositeItemBinder with different item types...
I am thinking about having
"firstNameClickHandler()"
"lastNameClickHandler()"
in the activity?
I managed around it, but your sample is missing a class.
net.droidlabs.mvvmdemo.databinding.UsersViewBinding
you don't have to call notifyDataChanged because data binding would be executed automatically
I read this project, and have a try to find where activityUsersRecycler set BindingRecyclerViewAdapter , but fail , Maybe I am not clear for DataBinding , please give me point .
thanks for you job !
Hi,
in your repo and your sample you rely on a library - recyclerview-binding. However, in your README you don't mention it at all. As a result, when I try to mimic your sample I am running into a wall because I am missing the classes that you have in recyclerview-binding library project. Please advise on the significance of this library!
Thank you,
Igor
SortedList does not even extend List at all. How could I use SortedList in RecyclerView with Android data binding library?
Came to your project via Stackoverflow, and found a bug. You're overriding onRangeMoved()
, but you're delegating to notifyItemMoved()
. This is only correct if itemCount
is 1.
@Override
public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount)
{
RecyclerView.Adapter adapter = adapterReference.get();
if (adapter != null)
{
adapter.notifyItemMoved(fromPosition, toPosition);
}
}
Do you know what I'm missing?
12-01 15:37:35.858 7994-7994/tech.ericntd.githubsearch E/AndroidRuntime: FATAL EXCEPTION: main
Process: tech.ericntd.githubsearch, PID: 7994
java.lang.NullPointerException: Attempt to invoke interface method 'int net.droidlabs.mvvm.recyclerview.adapter.binder.ItemBinder.getLayoutRes(java.lang.Object)' on a null object reference
at net.droidlabs.mvvm.recyclerview.adapter.BindingRecyclerViewAdapter.getItemViewType(BindingRecyclerViewAdapter.java:105)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5631)
MainActivity.java:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
GitHubRepository repository = new GitHubRepository(retrofit.create(GitHubApi.class));
final SearchViewModel searchViewModel = new SearchViewModel(repository);
final ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout
.activity_main);
binding.setVm(searchViewModel);
// set up views
binding.etSearchQuery.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v,
int actionId,
KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
searchViewModel.searchGitHubRepos(binding.etSearchQuery.getText().toString());
return true;
}
return false;
}
});
}
public ItemBinder<SearchResultViewModel> itemViewBinder() {
return new CompositeItemBinder<SearchResultViewModel>(
new SearchResultBinder(BR.searchResult, R.layout.rv_item_repo)
);
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="vm"
type="tech.ericntd.githubsearch.search.SearchViewModel" />
<variable
name="view"
type="tech.ericntd.githubsearch.search.MainActivity" />
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="tech.ericntd.githubsearch.search.MainActivity">
<EditText
android:id="@+id/et_search_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionSearch"
android:inputType="text"
android:maxLines="1"
android:singleLine="true" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_repos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:items="@{vm.searchResults}"
app:itemViewBinder="@{view.itemViewBinder}"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
app:layout_constraintTop_toBottomOf="@id/et_search_query" />
</android.support.constraint.ConstraintLayout>
</layout>
SearchResultViewModel.java:
public class SearchResultViewModel extends BaseObservable {
private final SearchResult searchResult;
public SearchResultViewModel(SearchResult searchResult) {
this.searchResult = searchResult;
}
@Bindable
public String getName() {
return searchResult.getName();
}
}
SearchResultBinder:
public class SearchResultBinder extends ConditionalDataBinder<SearchResultViewModel> {
public SearchResultBinder(int bindingVariable,
int layoutId) {
super(bindingVariable, layoutId);
}
@Override
public boolean canHandle(SearchResultViewModel model) {
return true;
}
}
rv_item_repo.xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="searchResult"
type="tech.ericntd.githubsearch.search.SearchResultViewModel" />
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_repo_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{searchResult.name}" />
</android.support.constraint.ConstraintLayout>
</layout>
I want to click the inner view,and I try to change the moduel.finally i failed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.