{"id":16432764,"url":"https://github.com/setoelkahfi/jomlorecyclerview","last_synced_at":"2026-04-11T21:03:18.738Z","repository":{"id":68137300,"uuid":"89554706","full_name":"setoelkahfi/JomloRecyclerView","owner":"setoelkahfi","description":"A detachable RecyclerView component. Use single adapter and insert item for the adapter. http://kbbi.web.id/jomlo","archived":false,"fork":false,"pushed_at":"2017-05-24T05:18:42.000Z","size":135,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-24T14:58:00.822Z","etag":null,"topics":["android","android-library","android-studio","java","recyclerview","recyclerview-adapter"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/setoelkahfi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-27T04:11:57.000Z","updated_at":"2017-05-24T05:55:43.000Z","dependencies_parsed_at":"2023-03-29T04:02:55.579Z","dependency_job_id":null,"html_url":"https://github.com/setoelkahfi/JomloRecyclerView","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/setoelkahfi%2FJomloRecyclerView","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/setoelkahfi%2FJomloRecyclerView/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/setoelkahfi%2FJomloRecyclerView/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/setoelkahfi%2FJomloRecyclerView/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/setoelkahfi","download_url":"https://codeload.github.com/setoelkahfi/JomloRecyclerView/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240690139,"owners_count":19841949,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-library","android-studio","java","recyclerview","recyclerview-adapter"],"created_at":"2024-10-11T08:44:19.595Z","updated_at":"2026-04-11T21:03:18.634Z","avatar_url":"https://github.com/setoelkahfi.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## JomloRecyclerView\nA detachable RecyclerView component.\n\nWrite single or multiple item (component) for the adapter, re-use it in another part. Every component act as a single entity inside the adapter.\n\n## How To Use\n### Import the file\n```java\nimport id.web.setoelkahfi.jomlorecyclerview.Adapter;\nimport id.web.setoelkahfi.jomlorecyclerview.ItemInterface;\n```\n### Use it in activity\nCreate reference to the adapter, create the dataset, and hook them up together via dependency injection.\n ```java\n public class MainActivity extends AppCompatActivity {\n \n     private RecyclerView recyclerView;\n     private Adapter jomloAdapter;\n     private List\u003cItemInterface\u003c? extends Adapter.ViewHolder\u003e\u003e jomloDataSet = new ArrayList\u003c\u003e();\n \n     @Override\n     protected void onCreate(Bundle savedInstanceState) {\n         super.onCreate(savedInstanceState);\n         setContentView(R.layout.activity_main);\n \n         recyclerView = (RecyclerView) findViewById(R.id.recycler_view);\n         jomloAdapter = new Adapter(jomloDataSet);\n         recyclerView.setAdapter(jomloAdapter);\n         recyclerView.setLayoutManager(new LinearLayoutManager(this));\n \n         for (int i=0; i \u003c 20; i++) {\n             SimpleItem item = new SimpleItem(\"Simple Example\", \"Subtest\");\n             jomloDataSet.add(item);\n         }\n \n         jomloAdapter.notifyDataSetChanged();\n \n     }\n }\n ```\n\n\n## The Files\n### Adapter\nCustom adapter to hold our items. Used it as adapter for regular RecyclerView.\n```java\npublic class Adapter extends RecyclerView.Adapter\u003cAdapter.ViewHolder\u003e {\n\n    private List\u003cItemInterface\u003c? extends ViewHolder\u003e\u003e dataSet = null;\n    private int lastPosition;\n\n    public Adapter(List\u003cItemInterface\u003c? extends ViewHolder\u003e\u003e dataSet) {\n        this.dataSet = dataSet;\n    }\n\n    public Adapter() {\n        this.dataSet = new ArrayList\u003c\u003e();\n    }\n\n    @Override\n    public int getItemViewType(int position) {\n        ItemInterface\u003c? extends ViewHolder\u003e item = dataSet.get(position);\n        return item.getTypeId();\n    }\n\n    @Override\n    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {\n        for (ItemInterface\u003c? extends ViewHolder\u003e item : dataSet) {\n            if (item.getTypeId() == i)\n                return item.createViewHolder(viewGroup);\n        }\n        return null;\n    }\n\n    @Override\n    public void onBindViewHolder(ViewHolder viewHolder, int i) {\n        ItemInterface\u003c? extends ViewHolder\u003e item = dataSet.get(i);\n        item.populateViewHolder(viewHolder);\n\n        Log.d(\"JomloRecyclerView\", \"OnBindViewHolder(\"+i+\"'\");\n        //setAnimation(viewHolder.itemView, i);\n    }\n\n    @Override\n    public int getItemCount() {\n        return dataSet.size();\n    }\n\n    private void setAnimation(View viewToAnimate, int position)\n    {\n        if (position \u003e lastPosition)\n        {\n            Animation animation = AnimationUtils.loadAnimation(viewToAnimate.getContext(), R.anim.slide_top_down);\n            viewToAnimate.startAnimation(animation);\n            lastPosition = position;\n        }\n    }\n\n    public void add(ItemInterface item) {\n        if (dataSet != null)\n            dataSet.add(item);\n    }\n\n    public void add(int index, ItemInterface item) {\n        if (dataSet != null)\n            dataSet.add(index, item);\n    }\n\n    public void remove(ItemInterface item) {\n        if (dataSet != null)\n            dataSet.remove(item);\n    }\n\n    public void remove(int index) {\n        if (dataSet != null)\n            dataSet.remove(index);\n    }\n\n    public void clear() {\n        if (dataSet != null)\n            dataSet.clear();\n    }\n\n    static class ViewHolder extends RecyclerView.ViewHolder {\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n        }\n    }\n}\n\n```\n\n### Item\nSubclass this class to create your custom item. Add this item into dataSet in your adapter.\n```java\npublic abstract class Item\u003cT extends Adapter.ViewHolder\u003e implements ItemInterface\u003cT\u003e {\n\n    @Override\n    public int getTypeId() {\n        return this.getClass().hashCode();\n    }\n\n    @Override\n    public T createViewHolder(ViewGroup parent) {\n        View v = LayoutInflater.from(parent.getContext()).inflate(getViewId(), parent, false);\n\n        try {\n            String className = ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0].toString().split(\"\\\\s\")[1];\n            return (T)Class.forName(className).getConstructor(this.getClass(), View.class).newInstance(this, v);\n        } catch (Exception e) {\n            throw new RuntimeException(\"Please create a ViewHolder accepting view as argument.\");\n        }\n    }\n\n    @Override\n    public void populateViewHolder(Adapter.ViewHolder holder) {\n        onPopulateViewHolder((T) holder);\n    }\n\n    protected abstract int getViewId();\n\n    protected abstract void onPopulateViewHolder(T holder);\n}\n```\n\n### Item interface\nInterface for creating item object.\n```java\ninterface ItemInterface\u003cT extends Adapter.ViewHolder\u003e {\n    int getTypeId();\n    T createViewHolder(ViewGroup parent);\n    void populateViewHolder(Adapter.ViewHolder holder);\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsetoelkahfi%2Fjomlorecyclerview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsetoelkahfi%2Fjomlorecyclerview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsetoelkahfi%2Fjomlorecyclerview/lists"}