标签: recycler-adapter

如何在滚动时重置RecyclerView Viewholder布局

Viewholder在我的RecyclerView适配器中使用了一个,我正在动态创建ImageViews.但是,当我向下滚动并向上滚动时,新图像会显示在之前的图像之上.我知道这是回收的概念,但我如何重置/清除Viewholder/布局,以便旧的ImageViews不会出现在每个回收的视图上?

public class RallyAdapter extends RecyclerView.Adapter<RallyAdapter.ViewHolder> {

public static class ViewHolder extends RecyclerView.ViewHolder{
    public TextView nameTextView;
    public TextView dateTextView;
    public TextView creatorTextView;
    public ImageButton thumbnail;
    public RelativeLayout relativeLayout;

    public ViewHolder(View itemView) {

        super(itemView);

        relativeLayout = (RelativeLayout) itemView.findViewById(R.id.view);
        nameTextView = (TextView) itemView.findViewById(R.id.name);
        dateTextView = (TextView) itemView.findViewById(R.id.date);
        thumbnail = (ImageButton) itemView.findViewById(R.id.imageButton);
        creatorTextView = (TextView) itemView.findViewById(R.id.creator_name);
    }
}

private ArrayList<Rally> mRallys;
private Context mContext;

public RallyAdapter(Context context, ArrayList<Rally> rallys) {
    this.mRallys = rallys;
    this.mContext = …
Run Code Online (Sandbox Code Playgroud)

android imageview recycler-adapter android-recyclerview

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

Recycler View的程序流程

我正在使用回收站视图实现导航栏,通过参考网站上提供的代码:http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html

在MainActivity.java中,调用以下行.

mAdapter = new MyAdapter(TITLES,ICONS,NAME,EMAIL,PROFILE);

mRecyclerView.setAdapter(mAdapter); 

mLayoutManager = new LinearLayoutManager(this);          

mRecyclerView.setLayoutManager(mLayoutManager);
Run Code Online (Sandbox Code Playgroud)

我想知道在MyAdapter.java中以什么顺序调用哪些函数?这是MyAdapter.java的代码

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private static final int TYPE_HEADER = 0;  // Declaring Variable to Understand which View is being worked on
    // IF the view under inflation and population is header or Item
    private static final int TYPE_ITEM = 1;

    private String mNavTitles[]; // String Array to store the …
Run Code Online (Sandbox Code Playgroud)

java android recycler-adapter android-recyclerview

0
推荐指数
1
解决办法
2047
查看次数

将组件动态添加到RecyclerView

我正在展示日常活动.事件/日数是可变的.RecView中的每个项目都是一个日期,其中应包含与事件数量一样多的视图.

这是一个项目的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/llDay">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvDay"
        android:text="TODAY"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp"
        android:textSize="25sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvNothing"
        android:text="No events"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:textSize="18sp"
        android:textStyle="italic"
        android:visibility="gone"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我想动态地向llDay添加视图.这是我的适配器:

public class DiaryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    ArrayList<ArrayList<Displayable>> diaryEvents = new ArrayList<>(); 
    Context context;

    public DiaryAdapter(ArrayList<ArrayList<Displayable>> diaryEvents, Context context) {
        this.diaryEvents = diaryEvents;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ViewGroup viewGroup = (ViewGroup) LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_day_diary, parent, false);
        DiaryDayViewHolder viewHolder = new DiaryDayViewHolder(viewGroup);
        return …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view recycler-adapter android-recyclerview

0
推荐指数
1
解决办法
5621
查看次数

RecyclerView | 最快的smoothScrollToPosition动画

问题是基于真实场景,我简化了用例:

假设我们有一个带有0到999之间值的微调器和循环视图.另外,对于常规的回收者滑动选项,用户也可以从微调器中选择一个数字,并且回收器将滚动到索引.

问题:当当前页面和新的微调器值之间的差值很大时,滚动视图需要花费大量时间(例如,我们在位置0,现在用户从微调器400中选择).

下面是代码(项目布局仅包含textview):

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    Spinner spinner;
    List<Integer> items = new ArrayList<>();
    ItemAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // init "database"
        for (int i = 0; i < 1000; i++)
            items.add(i);

        // Spinner
        spinner = (Spinner) findViewById(R.id.spinner);
        final ArrayAdapter<Integer> spinnerAdapter = new ArrayAdapter<Integer>(this, R.layout.support_simple_spinner_dropdown_item, items);
        spinner.setAdapter(spinnerAdapter);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                recyclerView.smoothScrollToPosition(i);
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) …
Run Code Online (Sandbox Code Playgroud)

android android-animation recycler-adapter android-recyclerview

0
推荐指数
1
解决办法
3975
查看次数

RecyclerView显示相同的项目

我正在尝试实现RecyclerView,显示来自JSONArray的数据.解析工作完美,但RecyclerView在每个项目中显示必须仅在最后一项中的信息.屏幕截图清楚地表明了这一点.

这是我的代码:

MainActivity.java

public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;

protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.AppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
    new parseTask().execute();
}

private class parseTask extends AsyncTask<Void, Void, String> {

    HttpURLConnection urlConnection = null;
    BufferedReader reader = null;
    String resultJson = "";
    ProgressDialog pdLoading = new ProgressDialog(MainActivity.this, R.style.MyDialogStyle);

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pdLoading.setMessage("\tLoading...");
        pdLoading.setCancelable(false);
        pdLoading.show();
    }

    @Override
    protected String doInBackground(Void... params) {
        try {
            URL url = new URL("http://songo.eu.pn/db_GetFromSongs.php");
            urlConnection = …
Run Code Online (Sandbox Code Playgroud)

java android recycler-adapter android-recyclerview

0
推荐指数
1
解决办法
1715
查看次数

快速浏览时,Recycler View显示错误的数据。

我有一个RecycleView地方,我对细胞有三种不同的看法。RView首次加载时,数据可以完美显示。当我开始滚动时,它会更改视图颜色。尝试了不同的方法,但无法解决。 原始观点错误的看法

public class TimelineRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private static final int DATE_LAYOUT = 1;
private static final int EVEN_LAYOUT = 2;
private static final int ODD_LAYOUT = 3;
private List<TimeLineResponseDO.content> contents = new ArrayList<>();
Context context;
LayoutInflater layoutInflater;
private boolean isVisible = false;
private ConnectionDetector connectionDetector;
private ProgressDialog progressDialog;
private Fragment fragment1;
DateFormat inputFormat;
DateFormat outputFormat;
int counterOnCreate = 0;
int counterOnBind = 0;
public interface OpenSubmissionDetails{
    void openSubmissionDetails(String submissionId);
}
public interface …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview recyclerview-layout

0
推荐指数
1
解决办法
2055
查看次数

如何在Recyclview android上使用带有seekbar的音频?

我使用的是我的音频列表,Recyclview并且工作正常,这意味着我可以播放音频文件Recyclview

当我在Seekbar音频文件上使用时Recyclview,问题是当我滚动时Recyclview,另一个items's of Recyclview Seekbar正在变化(Seekbar我正在使用音频文件的播放进度。)

当我滚动时,我想要的其他Seekbar项目Recyclview不会改变Recyclview

请检查我的代码吧,里面的onBindViewHolderRecyclview,我使用下面的代码,请一次检查。

 ((MyAudioChat) holder).sbMyAudio.setTag(position);
            ((MyAudioChat) holder).imgPlayAudio.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ((MyAudioChat) holder).sbMyAudio.removeCallbacks(null);
                    ((MyAudioChat) holder).sbMyAudio.setProgress(0);
                    if (mediaPlayer == null) {
                        mediaPlayer();
                        ((MyAudioChat) holder).sbMyAudio.setMax(mediaPlayer.getDuration());
                    } else {
                        mediaPlayer.stop();
                        mediaPlayer.release();
                        mediaPlayer();
                        ((MyAudioChat) holder).sbMyAudio.setMax(mediaPlayer.getDuration());
                    }

                    ((MyAudioChat) holder).sbMyAudio.getTag();
                    ((MyAudioChat) holder).sbMyAudio.setMax(mediaPlayer.getDuration()); // Set the Maximum range of the
                    ((MyAudioChat) holder).sbMyAudio.setProgress(mediaPlayer.getCurrentPosition());// set current progress to song's
                    Runnable …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer android-seekbar recycler-adapter

0
推荐指数
1
解决办法
742
查看次数

java.lang.ArrayIndexOutOfBoundsException:length = 12; recyclerview适配器中的index = -1

我正在使用回收站视图。这是适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<Contact> myContacts;
private Activity activity;

public MyAdapter(List<Contact> contacts,Activity activity)
{
    this.myContacts = contacts;
    this.activity = activity;
}


public class ViewHolder extends RecyclerView.ViewHolder {
    public TextView mTextView;
    public ImageView mColorView;
    public LinearLayout linearLayout;
    public ViewHolder(View v,MyAdapter adapter) {
        super(v);
        mTextView =  v.findViewById(R.id.name);
        mColorView = v.findViewById(R.id.image);
        linearLayout = v.findViewById(R.id.listItemLinearLayout);
        v.setOnLongClickListener(onLongClickListener(myContacts.get(getAdapterPosition()).getID(),getAdapterPosition(),adapter));
    }
}

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.my_text_view, parent, false);
    // set …
Run Code Online (Sandbox Code Playgroud)

android indexoutofboundsexception recycler-adapter android-recyclerview

0
推荐指数
1
解决办法
2121
查看次数

如何在回收站视图中显示ArrayList &lt;Hashmap &lt;String,String &gt;&gt;

我正在实现一个显示相似结果的搜索结果页面。我有一个Hash-Maps的数组列表(具有50个地图,其中每个地图都有12个值)。我想在结果页面的卡片视图中显示每个地图。我尝试为此使用回收站视图。但无法解决这个问题。我已经遍历了堆栈溢出中的所有线程,但找不到任何东西。

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String,String>>();

nodes = docc.getElementsByTagName("Table");
            int k = nodes.getLength();

            for (int i = 0; i < k; i++) {
                Element e = (Element) nodes.item(i);
                HashMap<String, String> map = new HashMap<String, String>();
                patid = getValue(e, "iPat_id");
                patname = getValue(e, "cPat_Name");
                patAge = getValue(e, "iAge");
                cMaritalSt = getValue(e, "cMarital_St");
                OpRegNo = getValue(e, "iReg_No");
                Doc_Id = getValue(e, "iDoc_id");
                Dept_Id = getValue(e, "iDept_id");
                DocName = getValue(e, "cDocName");
                PatAddress = getValue(e, "PatAddress");
                mobileno = getValue(e, "cMobile");
                patdob = …
Run Code Online (Sandbox Code Playgroud)

android arraylist hashmap recycler-adapter android-recyclerview

0
推荐指数
1
解决办法
1820
查看次数

Recyclerview findViewHolderForAdapterPosition()返回null

您好我正在尝试使用以下代码在特定位置获取recyclerview Viewholder:

  val viewHolder = educationRv.findViewHolderForAdapterPosition(i) as SectionsRecyclerAdapter.ViewHolder
Run Code Online (Sandbox Code Playgroud)

问题是,回收站视图回收了不可见的物品,如果不可见,我将无法获得物品和位置0。我在询问是否尝试过此解决方案之前进行了搜索,但是无法阻止视图的回收(我知道这不是很好的解决方案,但是我被卡住了,无法更好地解决问题):

  educationRv.recycledViewPool.setMaxRecycledViews(1,0)

  override fun getItemViewType(position: Int): Int {
        return 1
  }

  override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        if (holder != null) {
            holder.setIsRecyclable(false)
   }
Run Code Online (Sandbox Code Playgroud)

通用->我有带有20个可动态添加的edittexts的recyclerview,当用户单击“保存”时,我需要获取所有edittexts值并将其保存到数组,单击按钮“ Save”时出现问题,当我尝试时仅可见两个或三个视图变得不可见返回null

java android kotlin recycler-adapter android-recyclerview

0
推荐指数
1
解决办法
121
查看次数