标签: android-viewholder

View的setTag()getTag()方法的主要目的是什么?

这种方法的主要目的是什么setTag()getTag()View类型的对象?

我是否正确地认为我可以将任意数量的对象与单个视图相关联?

android view android-view android-viewholder

406
推荐指数
7
解决办法
24万
查看次数

RecyclerView Adapter中静态和非静态视图的区别是什么?

这种方法的优点是什么(在我的类MyAdapter中使用静态嵌套类扩展了RecyclerView.Adapter):

static class MyVH extends RecyclerView.ViewHolder {...}
Run Code Online (Sandbox Code Playgroud)

而这种方法(使用成员内部类):

  class MyVH extends RecyclerView.ViewHolder {...}
Run Code Online (Sandbox Code Playgroud)

或者它不会影响性能,可以使用这两种方法吗?

static android android-viewholder android-recyclerview

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

什么更好?循环中的notifyDataSetChanged或notifyItemChanged?

所以我有一个活动,RecyclerView我想通过按活动中的按钮更改TextView每个项目.RecyclerViewonClickListener()

我想知道在性能方面哪些更好:

  1. notifyDataSetChanged的.
  2. 与如int我使用条件循环低于List.size()地方notifyItemChanged将被称为几次.

在这两种情况下,我在RecyclerViewAdapter中创建布尔变量,用于onBindViewHolder知道如何更新项目.默认情况下它是假的,按下按钮后它变为真,所以onBindViewHolder以不同的方式更新项目.

我也想知道这种方法是否合适.

android android-viewholder android-recyclerview

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

ViewHolder有什么好处?

在开发Android程序时; 并且你想要一个ArrayAdapter你可以简单地拥有一个Class(大多数时候使用ViewHolder后缀)或直接膨胀你的convertView并通过id找到你的视图.
那么使用ViewHolder有什么好处?
两个例子都在这里:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = ((Activity)getContext()).getLayoutInflater().inflate(R.layout.row_phrase, null);
    }
    ((TextView) convertView.findViewById(R.id.txtPhrase)).setText("Phrase 01");
}
Run Code Online (Sandbox Code Playgroud)

要么 :

static class ViewHolder {   
    ImageView leftIcon;   
    TextView upperLabel;  
    TextView lowerLabel;  
}
Run Code Online (Sandbox Code Playgroud)

最后在getView中:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if (view == null) {
        view = LayoutInflater.from(context).inflate(R.layout.row_layout,
                    null, false);
        holder = new ViewHolder();
        holder.leftIcon = (ImageView) view.findViewById(R.id.leftIcon); …
Run Code Online (Sandbox Code Playgroud)

android listview android-arrayadapter android-viewholder

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

RecyclerView - 当视图不再可见时回调

我有一个带有Adapter和LayoutManager的RecyclerView.适配器有大约15种不同的ViewHolders.其中一个包含加载外部内容的WebView(其中99%是YouTube以外的视频).当任何适配器视图离开屏幕时出现问题 - WebView中的视频继续播放并且声音正在播放.不过,这对我来说是可以接受的.

当我转移到另一个Activity时,关键问题就开始了.视频的声音仍然存在.

当任何子视图更改可见性状态(意味着从显示中消失)时,RecyclerView是否有任何方式可以通知我?

android listener android-viewholder android-recyclerview

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

我应该在哪里取消绑定ViewHolder中的ButterKnife 8.xx?

我有一个使用ButterKnife注释的RecycleView.ViewHolder类.

我的代码也应该在这个ViewHolder类中unbind()吗?

public class AView extends RecyclerView.ViewHolder
{
    @BindView(R.id.a_text_view) TextView aText;

    public AView(final View view)
    {
        super(view);
        ButterKnife.bind(this, view); // It returns an Unbinder, but where should I call its unbind()?
    }
}
Run Code Online (Sandbox Code Playgroud)

文档(http://jakewharton.github.io/butterknife/)没有讨论这个问题.

android android-layout butterknife android-viewholder android-recyclerview

27
推荐指数
2
解决办法
8352
查看次数

Android:滚动后,RecyclerView内容搞砸了

我正在使用RecyclerView显示标记列表,并且值的每个标记都显示为CardView.但是,在向下滚动RecyclerView并向后滚动之后,卡片的某些内容会丢失,如下面的两个屏幕截图所示.滚动后,红色矩形中的内容将丢失.

在滚动之前; 在此输入图像描述

在滚动之后; 在此输入图像描述

我想知道它是否是RecyclerView的一个错误,并在谷歌搜索后找不到解决方案.

除标题外,所有观点都是看不见的,它们的可见性取决于标记的价值.

有谁知道为什么会这样?

android android-viewholder android-recyclerview

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

为什么在ViewHolder模式中ViewHolder类应该是静态的?

我只是想更好地理解我经常用来优化的以下模式 ListView

我的读物只指出了一个事实,即静态内部类被视为顶级类.与成员类(非静态)相比,这样的东西有什么好处?

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Comment comment = getItem(position);
    ViewHolder holder;
    if (convertView == null){
        holder = new ViewHolder();
        convertView = LayoutInflater.from(context).inflate(R.layout.mylayout, null);
        holder.nickname = (TextView) ((ViewGroup) convertView).findViewById(R.id.nickname);
        convertView.setTag(holder);
    }else{
        holder = (ViewHolder) convertView.getTag();
    }

    holder.nickname.setText(comment.getMember_nickname());
    CharSequence
    return convertView;
}

public static class ViewHolder{
    TextView nickname;
}
Run Code Online (Sandbox Code Playgroud)

java android android-viewholder

23
推荐指数
2
解决办法
5508
查看次数

使用ViewHolder显示ListView中最后一个列表项的状态

    int globalPosition ;

    ..............

    buttonAllData.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
        new UploadBulkData(globalPosition).execute();

        } 
    });

   ........

   class UploadBulkData extends AsyncTask<String, String, String> {
    private ProgressDialog pDialog;
    int dataPosition;

    public UploadBulkData(int position){
     this.dataPosition = position;
    }

    @Override
    protected void onPreExecute() {
      super.onPreExecute();
      pDialog = new ProgressDialog(UploadActivity.this);
      pDialog.setMessage("Uploading...");
      pDialog.setIndeterminate(false);
      pDialog.setCancelable(true);
      pDialog.show();
    }

    @Override
    protected String doInBackground(String... args) {
       .......
       String url = "http://web/uploadBulk.php";
       List<NameValuePair> params = new ArrayList<NameValuePair>();
       params.add(new BasicNameValuePair("UserData", st));

       String resultServer = getHttpPost(url,params); …
Run Code Online (Sandbox Code Playgroud)

android android-listview android-asynctask getview android-viewholder

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

即使RecyclerView.findViewHolderForAdapterPosition()在该位置返回null,也不会在视图位置调用onBindViewHolder()

我有一个包含13个项目的列表(虽然可以添加或删除项目),位置0-12.当首次显示包含RecyclerView的片段时,用户只能看到位置0到7(位置7只有一半可见).在我的适配器中,Log每次视图持有者被绑定/绑定(如果语法适用于此,则为idk)并记录其位置.

适配器

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    Log.d(TAG, "onBindViewHolder() position: " + position);
    ...
}
Run Code Online (Sandbox Code Playgroud)

从我Log看到0-7的位置是绑定的:

从适配器登录

我有一个selectAll()方法,ViewHolder通过适配器位置获取每个.如果返回holder的不是null我,则使用返回holder来更新视图以显示它已被选中.如果返回的持有者是null我调用selectOnBind()一个方法来标记该位置的视图更新,以显示它在绑定时被选中而不是实时,因为它当前未显示:

public void selectAll() {
    for (int i = 0; i < numberOfItemsInList; i++) {
        MyAdapter.ViewHolder holder = (MyAdapter.ViewHolder)
                mRecyclerView.findViewHolderForAdapterPosition(i);

        Log.d(TAG, "holder at position " + i + " is " + holder);

        if (holder != null) {
            select(holder);
        } else …
Run Code Online (Sandbox Code Playgroud)

android android-viewholder recycler-adapter android-recyclerview

22
推荐指数
3
解决办法
1万
查看次数