标签: recycler-adapter

RecyclerView适配器和ViewHolder动态更新

我正在尝试创建一个将从网络加载新闻的应用程序,并将动态更新.我正在使用RecyclerViewCardView显示内容.我Jsoup用来解析网站.我不认为我的代码是必需的,因为我的问题更具理论性而非实际性.我想了解使用动态更新的过程notifyDataSetChanged().在我的主要活动中,我获取所有标题并将它们添加到列表中.但我需要等待,直到所有项目都加载开始显示它们.我真的很感激,如果有人可以发布我正在尝试做的示例代码,因为我找不到很多关于组合的信息ViewHolder,Adapter并且RecyclerView.

android android-viewholder android-cardview recycler-adapter android-recyclerview

10
推荐指数
1
解决办法
4万
查看次数

如何在android中实现加载更多的recyclerview

我想在Recyclerview中实现更多的加载.这是代码.代码来自github.https://gist.github.com/ssinss/e06f12ef66c51252563e

MainActivity代码:

package com.example.tatson.bila;
import android.app.ProgressDialog;
import android.os.AsyncTask;

import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
import com.example.tatson.bila.CardAdapter;
import com.example.tatson.bila.Config;
import com.example.tatson.bila.SuperHeroes;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.Text;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity  implements SwipeRefreshLayout.OnRefreshListener{

    SwipeRefreshLayout swipeLayout;

    LinearLayoutManager mLayoutManager;

    // initially offset will be 0, later will be updated while parsing …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

10
推荐指数
4
解决办法
3万
查看次数

关于水平循环器视图中的ProperScrolling

我有问题在水平回收视图中滚动.例如,如果我有10个项目,第一次,我能够滚动到最后一项,但如果我去第一项,然后再次滚动到最后一项,它不会移动到最后一项.

这个问题是否与滚动有关,如果是这种情况,我是否应该覆盖滚动.

这是我的片段类声明

      LinearLayoutManager layoutManager
            = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
    mRecyclerView = (RecyclerView)v. findViewById(R.id.recycler_view);
    adapter  = new MyRecyclerAdapter(getActivity());
    mRecyclerView.setLayoutManager(layoutManager);
    mRecyclerView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

并在我的适配器中

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.CustomViewHolder> {

private Context mContext;
JobSiteActivity mjobSiteActivity;
ImageLoader loader = null;

public MyRecyclerAdapter(Activity activity) {
    this.mContext = activity;
    mjobSiteActivity = (JobSiteActivity)activity;
    loader = mjobSiteActivity.getImageLoader();
}

@Override
public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.image_detail_fragment, null);

    CustomViewHolder viewHolder = new CustomViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(CustomViewHolder customViewHolder, int i) {
    //FeedItem …
Run Code Online (Sandbox Code Playgroud)

android horizontal-scrolling recycler-adapter android-recyclerview

10
推荐指数
1
解决办法
1405
查看次数

RecyclerView仅在滚动时更新

我有一个RecyclerView带适配器的布局:

public class SimpleRecyclerAdapter extends RecyclerView.Adapter<SimpleViewHolder> {

  protected List<JSONObject> data = new ArrayList<>();

  public List<JSONObject> getData() { return data; }
}     
Run Code Online (Sandbox Code Playgroud)

我更新它的适配器,如:

public void udpdateFromJson( JSONObject payload ) {
  JSONArray msgs = payload.optJSONArray( "messages" );
  for( int ix = 0; null != msgs && ix < msgs.length(); ix++ ){
    JSONObject o = msgs.optJSONObject( ix );
    if( loadingMore ) adapter.getData().add( 1 + ix, o );
    else adapter.getData().add( o );
  }

  adapter.notifyDataSetChanged();
  recyclerView.invalidate();
}
Run Code Online (Sandbox Code Playgroud)

问题是,只有当我触摸或滚动视图时才会看到新项目.

我错过了什么?

更新:

解决问题我更换了线

adapter.notifyDataSetChanged();
recyclerView.invalidate(); …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

10
推荐指数
2
解决办法
2407
查看次数

由于Admob广告,Recyclerview在滚动上滞后

我想在RecyclerView广告中加载广告已成功加载,但在滚动时会出现这么多延迟

以下是我在Adapter的OnBindViewHolder方法中编写的代码

如何解决这个滞后?

((DealHolder) holder).adcardView.post(new Runnable() {
                @Override
                public void run() {
                    final NativeExpressAdView adView = new NativeExpressAdView(((DealHolder) holder).itemView.getContext());
                    final int adWidth = ((DealHolder) holder).adcardView.getWidth() - ((DealHolder) holder).adcardView.getPaddingLeft()
                            - ((DealHolder) holder).adcardView.getPaddingRight();
                    final int adHeight = ((DealHolder) holder).adcardView.getHeight() - ((DealHolder) holder).adcardView.getPaddingBottom()
                            - ((DealHolder) holder).adcardView.getPaddingTop();
                    final float scale = ((DealHolder) holder).adcardView.getResources().getDisplayMetrics().density;
                    AdSize adSize = new AdSize((int) (adWidth / scale), (int) (adHeight / scale));
                    adView.setAdSize(adSize);
                    adView.setAdUnitId(((DealHolder) holder).adcardView.getContext().getString(R.string.test_adunit_id));
                    AdRequest request = new AdRequest.Builder().addTestDevice("jjhjhbjhjhjhjhjhjhjh").build();
                    adView.loadAd(request);
                    adView.setAdListener(new AdListener() {
                        @Override
                        public void onAdLoaded() { …
Run Code Online (Sandbox Code Playgroud)

android admob android-cardview recycler-adapter android-recyclerview

10
推荐指数
1
解决办法
2247
查看次数

如何显示下一张/上一张卡的一部分RecyclerView

实现此功能的最佳策略是什么:

在此输入图像描述

我有一个水平的RecyclerView卡.每张卡都将实现整个屏幕,但我希望它显示下一张卡的一部分,如果它有多个项目则显示前一张卡.

我知道我可以通过android:layout_width在适配器上设置我的卡来实现这一点,使其具有250dp的特定DP而不是match_parent.但它看起来不是一个合适的解决方案.

这是我的代码:

使用RecyclerView的活动:

    class ListPokemon : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val items = createListPokemons()
        recyclerView.adapter = PokemonAdapter(items)
        recyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
        recyclerView.setHasFixedSize(true)
        val pagerSnapHelper = PagerSnapHelper()
        pagerSnapHelper.attachToRecyclerView(recyclerView)
    }

    private fun createListPokemons(): List<Pokemon> {
        val pokemons = ArrayList<Pokemon>()
        pokemons += createPokemon("Pikachu")
        pokemons += createPokemon("Bulbasaur")
        pokemons += createPokemon("Charmander")
        pokemons += createPokemon("Squirtle")

        return pokemons
    }

    private fun createPokemon(name: String) = Pokemon(name = name, height = 1, weight = 69, id = …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

10
推荐指数
1
解决办法
3462
查看次数

在Recycler视图中swapadapter方法和notifydatasetchanged方法有什么区别?

我想知道RecylerView的swapAdapter和notifyDatasetChanged方法有什么区别?修改数据时哪一个更好用?

android recycler-adapter android-recyclerview

9
推荐指数
1
解决办法
6796
查看次数

Recycler View Fatal Exception:java.lang.ArrayIndexOutOfBoundsException

我通过crashlytics得到了这个堆栈跟踪.我不知道问题出在哪里.

是否有任何替代的StaggeredGridLayoutManager,我可以用它来获得像布局一样的列表视图.

Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: start < 0 || end > len. start=-1, end=11, len=11
   at java.util.Arrays.checkStartAndEnd(Arrays.java:1745)
   at java.util.Arrays.fill(Arrays.java:803)
   at android.support.v7.widget.StaggeredGridLayoutManager$LazySpanLookup.invalidateAfter(SourceFile:2404)
   at android.support.v7.widget.StaggeredGridLayoutManager.handleUpdate(SourceFile:1373)
   at android.support.v7.widget.StaggeredGridLayoutManager.onItemsRemoved(SourceFile:1327)
   at android.support.v7.widget.RecyclerView$6.dispatchUpdate(SourceFile:725)
   at android.support.v7.widget.RecyclerView$6.onDispatchFirstPass(SourceFile:716)
   at android.support.v7.widget.AdapterHelper.dispatchFirstPassAndUpdateViewHolders(SourceFile:316)
   at android.support.v7.widget.AdapterHelper.dispatchAndUpdateViewHolders(SourceFile:302)
   at android.support.v7.widget.AdapterHelper.applyRemove(SourceFile:182)
   at android.support.v7.widget.AdapterHelper.preProcess(SourceFile:103)
   at android.support.v7.widget.RecyclerView.processAdapterUpdatesAndSetAnimationFlags(SourceFile:2767)
   at android.support.v7.widget.RecyclerView.onMeasure(SourceFile:2538)
   at android.view.View.measure(View.java:16521)
   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5134)
   at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
   at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
   at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
   at android.view.View.measure(View.java:16521)
   at android.support.v4.view.ViewPager.onMeasure(SourceFile:1489)
   at android.view.View.measure(View.java:16521)
   at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
   at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
   at android.view.View.measure(View.java:16521)
   at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
   at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
   at android.view.View.measure(View.java:16521)
   at android.support.v4.widget.DrawerLayout.onMeasure(SourceFile:940)
   at android.view.View.measure(View.java:16521)
   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5134)
   at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
   at android.support.v7.widget.ContentFrameLayout.onMeasure(SourceFile:135)
   at …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

9
推荐指数
1
解决办法
3092
查看次数

在回收站视图中加载大量项目

我在片段中有一个回收者视图,基本上我试图在回收者视图中加载歌曲列表.每行回收者视图包含一个imageview(用于专辑封面)和textview(用于歌曲名称).我遇到麻烦,当数据集的大小很大时,即当歌曲太多时,回收者视图滞后,应用程序最终给出ANR.我正在使用Glide在每行的imageview中加载专辑艺术.谷歌音乐播放器如何能够显示如此大量的歌曲而没有任何延迟?

编辑: 这是我的SongsFragment

public class SongsFragment extends Fragment {
static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
ProgressBar progressBar;    // progress bar to show after every 30 items
NestedScrollView nestedScrollView;  //for smooth scrolling of recyclerview as well as to detect the end of recyclerview
RecyclerView recyclerView;
ArrayList<Song> songMainList = new ArrayList<>();  //partial list in which items are added
ArrayList<Song> songAllList = new ArrayList<>(); //Complete List of songs
SongAdapter songsAdapter;
private LinearLayoutManager layoutManager;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, …
Run Code Online (Sandbox Code Playgroud)

android mediastore recycler-adapter android-recyclerview android-glide

9
推荐指数
2
解决办法
1万
查看次数

DiffUtils不显示新项目

DiffUtils.dispatchUpdatesTo(adapter) 不更新我的数组的大小 recyclerView

我的result尺寸大于当前尺寸itemList,但仅显示当前尺寸

如何显示我数组大小的变化DiffUtils?我认为使用notifyDatasetChanged()不正确。

这是我现在在适配器中执行的操作:

    fun update(items: List<ITEM>) {
    updateAdapterWithDiffResult(calculateDiff(items))
}

private fun updateAdapterWithDiffResult(result: DiffUtil.DiffResult) {
    result.dispatchUpdatesTo(this)
}

private fun calculateDiff(newItems: List<ITEM>) =
        DiffUtil.calculateDiff(DiffUtilCallback(itemList, newItems))
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

9
推荐指数
1
解决办法
2109
查看次数