Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView Scroll Slow-SetHassTableId不工作,是否可以预加载多个屏幕外视图?_Android_Android Recyclerview - Fatal编程技术网

Android RecyclerView Scroll Slow-SetHassTableId不工作,是否可以预加载多个屏幕外视图?

Android RecyclerView Scroll Slow-SetHassTableId不工作,是否可以预加载多个屏幕外视图?,android,android-recyclerview,Android,Android Recyclerview,我一直试图通过使用此[链接][1]中的建议,使用RecyclerView修复我在类似Twitter的应用程序中的缓慢滚动,但遇到了7“SetHassTableId(true)”的问题。当我不重写getItemId()时,我在我的RecyclerView中只得到30个项目中的6个。当我覆盖它并返回函数的位置或tweetStatusID时,它仍然滞后,就像我没有为适配器使用SetHassTableID(true)时一样 更新:我添加了一些AsyncTasks,这提高了我的速度,但仍然很慢,我很好奇是

我一直试图通过使用此[链接][1]中的建议,使用RecyclerView修复我在类似Twitter的应用程序中的缓慢滚动,但遇到了7“SetHassTableId(true)”的问题。当我不重写getItemId()时,我在我的RecyclerView中只得到30个项目中的6个。当我覆盖它并返回函数的位置或tweetStatusID时,它仍然滞后,就像我没有为适配器使用SetHassTableID(true)时一样

更新:我添加了一些AsyncTasks,这提高了我的速度,但仍然很慢,我很好奇是否可以做更多的改进,或者是否可以预加载更多视图,以便在快速滚动时准备更多视图

MyFeed onCreate():

适配器:

public class TweetListAdapterFeed extends RecyclerView.Adapter<TweetListAdapterFeed.ViewHolder>
{
  private static List<TweetData> mData;
  private static Context context;
  public static FirebaseAuth mAuth;
  private static String dbFeedPath;
  private static ClickListener clickListener;

  ConfigurationBuilder cb;
  TwitterFactory tf;
  Twitter twitter;

  public TweetListAdapterFeed(@SuppressWarnings("SameParameterValue") List<TweetData> mData,
                              Context context, ClickListener clickListener)
  {
    TweetListAdapterFeed.mData = mData;
    TweetListAdapterFeed.context = context;
    TweetListAdapterFeed.clickListener = clickListener;
  }

  @NonNull
  @Override
  public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
  {
    dbFeedPath = context.getString(R.string.isu_feed);

    ViewHolder viewHolder = new ViewHolder(LayoutInflater.from(viewGroup.getContext())
                                           .inflate(R.layout.feed_list_item, viewGroup,
                                          false), clickListener);

    statusAsyncTask = new StatusAsyncTask(this, viewHolder, i);
    mediaAsyncTaskFeed = new MediaAsyncTaskFeed(this, viewHolder);

    return viewHolder;
  }

  @Override
  public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i)
  {
    // Update Like and Retweet Count via AsyncTask
    statusAsyncTask.execute(mData.get(i).getTweetStatusID());

    // Tweet Media
    if (!mData.get(i).getTweetPic1().equals(""))
    {
      viewHolder.photo1.setVisibility(View.VISIBLE);
      viewHolder.photo1.setImageResource(R.drawable.loading_image);
      mediaAsyncTaskFeed.execute(mData.get(i).getTweetPic1());
    }
    else
    {
      viewHolder.photo1.setVisibility(View.GONE);
    }

    // Twitter Profile Image
    Picasso.get().load(mData.get(i).getProfileImage()).fit().into(viewHolder.profileImage);

    // Twitter Name
    viewHolder.twitterName.setText(mData.get(i).getTwitterName());

    // Twitter Handle
    String tString = context.getString(R.string.AtSymbol) + mData.get(i).getTwitterHandle();
    viewHolder.twitterHandle.setText(tString);

    // Tweet Time, converted to Time since Tweet was posted
    String timeAgo = convertDateToTimeAgo(mData.get(i).getTweetTime());
    viewHolder.tweetDate.setText(timeAgo);

    // Tweet Text
    viewHolder.tweetText.setText(mData.get(i).getTweetText());

    // Retweeted By
    if (!mData.get(i).getRetweetedBy().equals(""))
    {
      // Tweet was a Retweet
      viewHolder.retweetedBy.setText(mData.get(i).getRetweetedBy());
      viewHolder.retweetedBy.setVisibility(View.VISIBLE);
      viewHolder.imageRetweetedBy.setVisibility(View.VISIBLE);
    }
    else
    {
      // Tweet was original
      viewHolder.retweetedBy.setText("");
      viewHolder.retweetedBy.setVisibility(View.GONE);
      viewHolder.imageRetweetedBy.setVisibility(View.GONE);
    }
  }

  /*
  @Override
  public long getItemId(int position)
  {
    return position; //TweetListAdapterFeed.mData.get(position).getTweetStatusID();
  }
   */
公共类TweetListAdapterFeed扩展了RecyclerView.Adapter
{
私有静态列表mData;
私有静态语境;
公共静态FirebaseAuth mAuth;
私有静态字符串dbFeedPath;
私有静态ClickListener ClickListener;
配置生成器cb;
twitter工厂tf;
推特;
公共TweetListAdapterFeed(@SuppressWarnings(“SameParameterValue”)列表mData,
上下文上下文,单击侦听器(单击侦听器)
{
TweetListAdapterFeed.mData=mData;
TweetListAdapterFeed.context=上下文;
TweetListAdapterFeed.clickListener=clickListener;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i)
{
dbFeedPath=context.getString(R.string.isu\u提要);
ViewHolder ViewHolder=新的ViewHolder(LayoutInflater.from(viewGroup.getContext())
.充气(R.layout.feed\u list\u项目、视图组、,
false),单击Listener);
statusAsyncTask=新的statusAsyncTask(this,viewHolder,i);
mediaAsyncTaskFeed=新的mediaAsyncTaskFeed(此,viewHolder);
返回视图持有者;
}
@凌驾
public void onBindViewHolder(@NonNull final ViewHolder ViewHolder,final int i)
{
//通过AsyncTask更新Like和转发计数
statusAsyncTask.execute(mData.get(i).getWeetStatusId());
//推特媒体
如果(!mData.get(i).getWeetPic1()等于(“”)
{
viewHolder.photo1.setVisibility(View.VISIBLE);
viewHolder.photo1.setImageResource(R.drawable.loading_image);
mediaancynctaskfeed.execute(mData.get(i).getTweetPic1());
}
其他的
{
viewHolder.photo1.setVisibility(View.GONE);
}
//Twitter个人资料图片
Picasso.get().load(mData.get(i).getProfileImage()).fit().into(viewHolder.profileImage);
//推特名称
viewHolder.twitterName.setText(mData.get(i.getWitterName());
//推特手柄
String tString=context.getString(R.String.AtSymbol)+mData.get(i.getWitterHandle();
viewHolder.twitterHandle.setText(tString);
//推文时间,转换为推文发布后的时间
String timeAgo=convertDateToTimeAgo(mData.get(i.getTweetTime());
viewHolder.tweetDate.setText(timeAgo);
//推文
viewHolder.tweetText.setText(mData.get(i.getTweetText());
//转发
如果(!mData.get(i).getRetweetdBy()等于(“”)
{
//推特是一个转发
viewHolder.retweetdby.setText(mData.get(i.getRetweetdby());
viewHolder.retweedby.setVisibility(View.VISIBLE);
viewHolder.imageRetweetBy.setVisibility(View.VISIBLE);
}
其他的
{
//推特是原创的
viewHolder.retweedby.setText(“”);
viewHolder.retweedby.setVisibility(View.GONE);
viewHolder.imageRetweetBy.setVisibility(View.GONE);
}
}
/*
@凌驾
公共长getItemId(int位置)
{
return position;//TweetListAdapterFeed.mData.get(position.getTweetStatusID();
}
*/

您正在调用
StrictMode.ThreadPolicy.Builder().permitAll().build()这是专门让你在主线程上做超慢的事情。当然,如果你使用了“代码> > AycCaseToase<代码> 2020,Java不是KoTLIN,@ IGOCAROBASSKY,我是N0B,这是我的第一个应用程序,你建议取代AcyCaskTebug?我也是来自C++世界,所以java很容易被java取出来。,将及时学习Kotlin。@BiCURE请查看异步编程的Kotlin协同程序:
public class TweetListAdapterFeed extends RecyclerView.Adapter<TweetListAdapterFeed.ViewHolder>
{
  private static List<TweetData> mData;
  private static Context context;
  public static FirebaseAuth mAuth;
  private static String dbFeedPath;
  private static ClickListener clickListener;

  ConfigurationBuilder cb;
  TwitterFactory tf;
  Twitter twitter;

  public TweetListAdapterFeed(@SuppressWarnings("SameParameterValue") List<TweetData> mData,
                              Context context, ClickListener clickListener)
  {
    TweetListAdapterFeed.mData = mData;
    TweetListAdapterFeed.context = context;
    TweetListAdapterFeed.clickListener = clickListener;
  }

  @NonNull
  @Override
  public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
  {
    dbFeedPath = context.getString(R.string.isu_feed);

    ViewHolder viewHolder = new ViewHolder(LayoutInflater.from(viewGroup.getContext())
                                           .inflate(R.layout.feed_list_item, viewGroup,
                                          false), clickListener);

    statusAsyncTask = new StatusAsyncTask(this, viewHolder, i);
    mediaAsyncTaskFeed = new MediaAsyncTaskFeed(this, viewHolder);

    return viewHolder;
  }

  @Override
  public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i)
  {
    // Update Like and Retweet Count via AsyncTask
    statusAsyncTask.execute(mData.get(i).getTweetStatusID());

    // Tweet Media
    if (!mData.get(i).getTweetPic1().equals(""))
    {
      viewHolder.photo1.setVisibility(View.VISIBLE);
      viewHolder.photo1.setImageResource(R.drawable.loading_image);
      mediaAsyncTaskFeed.execute(mData.get(i).getTweetPic1());
    }
    else
    {
      viewHolder.photo1.setVisibility(View.GONE);
    }

    // Twitter Profile Image
    Picasso.get().load(mData.get(i).getProfileImage()).fit().into(viewHolder.profileImage);

    // Twitter Name
    viewHolder.twitterName.setText(mData.get(i).getTwitterName());

    // Twitter Handle
    String tString = context.getString(R.string.AtSymbol) + mData.get(i).getTwitterHandle();
    viewHolder.twitterHandle.setText(tString);

    // Tweet Time, converted to Time since Tweet was posted
    String timeAgo = convertDateToTimeAgo(mData.get(i).getTweetTime());
    viewHolder.tweetDate.setText(timeAgo);

    // Tweet Text
    viewHolder.tweetText.setText(mData.get(i).getTweetText());

    // Retweeted By
    if (!mData.get(i).getRetweetedBy().equals(""))
    {
      // Tweet was a Retweet
      viewHolder.retweetedBy.setText(mData.get(i).getRetweetedBy());
      viewHolder.retweetedBy.setVisibility(View.VISIBLE);
      viewHolder.imageRetweetedBy.setVisibility(View.VISIBLE);
    }
    else
    {
      // Tweet was original
      viewHolder.retweetedBy.setText("");
      viewHolder.retweetedBy.setVisibility(View.GONE);
      viewHolder.imageRetweetedBy.setVisibility(View.GONE);
    }
  }

  /*
  @Override
  public long getItemId(int position)
  {
    return position; //TweetListAdapterFeed.mData.get(position).getTweetStatusID();
  }
   */