Giter VIP home page Giter VIP logo

android-data-binding-recyclerview's Issues

Use in Eclipse

Where can I found this binding lib. jar or import it in Eclipse to use it ??

NullPointerException

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>

Click handling for items within a row

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?

multiple view type

how to use composite Binder or how to set app:items in recyclerview if we have multiple items layout

Bug in WeakReferenceOnListChangedCallback

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);
      }
}

CompositeItemBinder

can you plz provide sample code for compositeItemBinder for multiple-view Type in recyclerview

Question: recyclerview-binding

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.