标签: android-viewholder

如何在自定义ListView中使用Button OnClick和View Holder

我需要一些帮助,我正在使用一个视图来从动态arrayadapter中显示.

我有列表视图.

每行包含;

  • 标题(Textview),
  • 子标题(TextView),
  • 进度条
  • 下载按钮(按钮).

我想在单击"下载"按钮时显示进度条并隐藏"下载"按钮.单击第一行中的下载按钮时,将显示第一个进度条,但也显示第8个进度条.

这是我的代码.我做错了什么?

    public class TabInComingAdaptor extends BaseAdapter {

    public static class ViewHolder {
        TextView title;
        TextView desc;
        Button DownloadButton;
        ProgressBar pB;
    }

    private ArrayList<rowObject> data;
    private LayoutInflater inflater = null;
    private Application ap;
    // final private Activity currentActivity;
    Button progressButton1;
    int CurrentUser;

    public TabInComingAdaptor(Activity activity, Application application,
            ArrayList<rowObject> GelenFakslar) {
        // currentActivity = activity;
        ap = application;
        data = GelenFakslar;
        inflater = (LayoutInflater) ap
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return data.size();
    } …
Run Code Online (Sandbox Code Playgroud)

android android-listview android-viewholder

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

一个CardView中的多个RecyclerView项目

我正在尝试在每个CardView项目中创建多个RecyclerView项目,因为这个应用程序:

在此输入图像描述

我创建了一个包含数据集项的cardview_item.xml(本例中的匹配项)

以及包含卡片标题的cardview_title.xml(本例中为联盟).

cardview_title.xml:

<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="88dp"
card_view:cardCornerRadius="1dp"
android:layout_margin="4dp">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/amount_title"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginEnd="5dp"
        android:layout_marginTop="5dp"
        android:gravity="center"
        android:layout_alignParentEnd="true"
        android:padding="5dp"
        android:text="@string/amount"
        android:textAllCaps="true"
        android:textSize="20sp"
        android:textColor="@android:color/black"/>

    .
    .
    .

    <TextView
        android:id="@+id/week_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/amount_title"
        android:layout_alignTop="@id/amount_title"
        android:layout_alignParentStart="true"
        android:layout_marginStart="5dp"
        android:gravity="center"
        android:padding="5dp"
        android:textAllCaps="true"
        android:text="@string/week"
        android:textColor="@android:color/black"
        android:textSize="20sp" />

    <View
        android:id="@+id/lineSeparator"
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:layout_below="@id/week_title"
        android:background="@android:color/darker_gray"/>

    <include
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        layout="@layout/cardview_item"
        android:layout_below="@+id/week_title"
        android:layout_centerHorizontal="true" />

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

我扩展的RecyclerView.Adapter在单独的cardview中显示每个数据集项:

在此输入图像描述

如何使用RecyclerView,CardView和ViewHolder设计模式实现这一点?

任何帮助将不胜感激.

谢谢

android android-viewholder android-cardview android-recyclerview

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

在OnLayoutChangeListener中更改视图的大小

我已经使用recyclerview实现了一个库,并且我已经向viewholder添加了一个onLayoutChangeListener,这样一旦计算了布局,就会更改imageview的高度以匹配图像的宽高比.它在第一次打开活动,旋转设备或解锁屏幕时工作正常,但是当从另一个活动返回时它不起作用.执行该方法,但imageview不会更改.什么可能导致这个?

        image.addOnLayoutChangeListener(new View.OnLayoutChangeListener(){
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                ImageView img = (ImageView) v;
                Bitmap bm = ((BitmapDrawable) img.getDrawable()).getBitmap();
                img.getLayoutParams().height = Utils.scaledHeight(bm.getWidth(), bm.getHeight(), img.getWidth());
                img.removeOnLayoutChangeListener(this);
            }
        });
Run Code Online (Sandbox Code Playgroud)

调试器显示正确设置的高度,但显示的imageview不是它应该的样子.

正确的形象

图像不正确

android android-viewholder android-recyclerview

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

为什么要在RecyclerView.ViewHolder中使用static

为什么推荐使用staticclass扩展从RecyclerView.ViewHolder,如果我创建这个类的一个新的实例onCreateViewHolder方法,我想该实例用于每个项目:

@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview,parent,false);
    return new RecyclerViewAdapter.RecyclerViewHolder(view);
}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {

    String textTop = noticias.get(position).getHora()+ noticias.get(position).getTemperatura();

    holder.textViewTop.setText(textTop);
    holder.textViewBot.setText(noticias.get(position).getTexto());

}


public static class RecyclerViewHolder extends RecyclerView.ViewHolder{

    public TextView textViewTop;
    public TextView textViewBot;

    public RecyclerViewHolder(View view){
        super(view);
        textViewTop = (TextView) view.findViewById(R.id.textView4);
        textViewBot = (TextView) view.findViewById(R.id.textView5);
    }

}
Run Code Online (Sandbox Code Playgroud)

android android-viewholder recycler-adapter android-recyclerview

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

如何重用RecyclerView对象,适配器和视图持有者

我有一系列,曾经被称为listViews,在我的应用程序中,现在是RecyclerViews.我很好奇提高模块性和减少我的应用程序的这一部分的重复的最有效的方法.

例如,我有GroupMemberFragmentFriendFragment,几乎相同RecyclerView.ViewHoldersRecyclerView.Adapters

重构的最佳方法是什么,以减少代码重复,但仍然允许每个相应的项目列表对其数据是唯一的,并且足够灵活,以便将来添加更多数据?

GroupMemberFragment:

public class GroupMemberFragment extends Fragment {

    RecyclerView mRecyclerView;
    ArrayList<Group> mGRoups;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.recycler_layout, container, false);

        mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view_layout);
        mRecyclerView.setHasFixedSize(true);

        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        // Only things that need to change across all the list classes....
        mGRoups = GroupListProvider.getInstance(getActivity()).getGroups();
        mRecyclerView.setAdapter(new GroupAdapter(mGRoups));

        return view;
    }


    // inner Class

    private class GroupViewHolder …
Run Code Online (Sandbox Code Playgroud)

android android-viewholder recycler-adapter android-recyclerview

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

ListView setText在特定位置

我定义了以下代码,以便能够在特定位置设置文本.

if(position == 0) {
                holder.text.setText("blah");
            }
Run Code Online (Sandbox Code Playgroud)

我想要检查位置是否等于0,然后如果是,则在位置p上设置文本 - 每次它是p =位置+ 1(下一个位置).我们是否能够将文本从持有者设置为文本视图,但是在某个位置.

谢谢.

android listview android-adapter baseadapter android-viewholder

5
推荐指数
2
解决办法
3659
查看次数

RecyclerView.ViewHolders中的Android DataBinding具有不同的布局

我正在尝试在新项目中使用androids数据绑定功能,到目前为止对此非常满意。

但是现在我在我的recyclerviews视图持有人中遇到了一个问题。

我的视图持有人使用不同的布局(基于创建时的视图类型)

public MediaViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
     switch(viewType){
          case HEADER: 
             int layout = R.layout.item_media_header;
             break;
          case DEFAULT: 
             int layout = R.layout.item_media_default;
             break;
          case SMALL: 
             int layout = R.layout.item_media_small;
             break;
     }
     View v = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
     return new MediaViewHolder(v);
}
Run Code Online (Sandbox Code Playgroud)

因此,所有这三个布局都具有相同的视图,只是布局不同。因此,模型与视图的绑定是相同的。

无论如何,基于android创建的布局

  • ItemMediaHeaderBinding
  • ItemMediaDefaultBinding
  • ItemMediaSmallBinding

这很烂,因为这将迫使我创建3个不同的ViewHolder类或通过检查使用的布局来实例化正确的绑定类。

这种情况下有最佳实践吗?是否可以为这三个绑定类(例如“ ItemMediaBinding”)简单地创建一个超类。

提前致谢。

android android-viewholder android-databinding

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

如何使用ListRowPresenter的setRowViewSelected

我正在使用Android TV的默认项目.以下是在我的创建卡片的代码BrowseFragment:

private void loadRows() {
    List<Movie> list = MovieList.setupMovies();
    ListRowPresenter mListRowPresenter = new ListRowPresenter();
    mRowsAdapter = new ArrayObjectAdapter(mListRowPresenter);

    mListRowPresenter.setRowViewSelected(/*HOW TO GET VIEWHOLDER HERE?*/, false);

    CardPresenter cardPresenter = new CardPresenter();

    int i;
    for (i = 0; i < NUM_ROWS; i++) {
        if (i != 0) {
            Collections.shuffle(list);
        }
        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
        for (int j = 0; j < NUM_COLS; j++) {
            listRowAdapter.add(list.get(j % 5));
        }
        HeaderItem header = new HeaderItem(i, MovieList.MOVIE_CATEGORY[i]);
        mRowsAdapter.add(new ListRow(header, listRowAdapter));
    }

    setAdapter(mRowsAdapter); …
Run Code Online (Sandbox Code Playgroud)

android adapter android-viewholder android-tv listrowpresenter

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

在嵌套的RecyclerViews中保持滚动位置

我有一个ViewHolder包含另一个RecyclerView.这种类型的ViewHolder多次重复使用.

由于ViewHolder在不同项之间RecyclerView共享,因此在项之间也共享滚动位置.例如,您滚动到第一个项目的末尾,第五个项目的RecyclerView也会滚动到最后,因为视图被重用.

我试图通过映射1 ViewHolder到1项来解决这个问题.

我试过设置一个itemId项目,调用RecyclerView.ViewHolder #setIsRecyclable(false),并RecyclerView.getRecycledViewPool().setMaxRecycledViews()按照这个答案中的提到进行扩展/设置

向下滚动并向上滚动(ViewHolder获得回收)后,内部RecyclerView的滚动位置将重置为第一个项目.

android android-viewholder android-recyclerview nestedrecyclerview

5
推荐指数
0
解决办法
593
查看次数

显示每个RecyclerView项目后如何检测

我想在显示给用户后在RecylerView中检测每个项目。

基本上,我试图在每个项目加载到屏幕上后播放声音。

But I am not able to detect whenever each item is loaded on the screen! Is there any method I have to call to detect each item rendered

E.g 1st RecyclerView item displayed -> play sound
    2st RecyclerView item displayed -> play sound...
Run Code Online (Sandbox Code Playgroud)

My Adapter class looks like this -

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

    private List<Multiples> items = new ArrayList<>();

    private Context ctx;
    private OnItemClickListener mOnItemClickListener;
    private int animation_type = 0;
    .........
    .........
Run Code Online (Sandbox Code Playgroud)

I …

java android android-viewholder recycler-adapter android-recyclerview

5
推荐指数
2
解决办法
3931
查看次数