这种方法的主要目的是什么setTag()及getTag()的View类型的对象?
我是否正确地认为我可以将任意数量的对象与单个视图相关联?
这种方法的优点是什么(在我的类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)
或者它不会影响性能,可以使用这两种方法吗?
所以我有一个活动,RecyclerView我想通过按活动中的按钮更改TextView每个项目.RecyclerViewonClickListener()
我想知道在性能方面哪些更好:
notifyDataSetChanged的.List.size()地方notifyItemChanged将被称为几次.在这两种情况下,我在RecyclerViewAdapter中创建布尔变量,用于onBindViewHolder知道如何更新项目.默认情况下它是假的,按下按钮后它变为真,所以onBindViewHolder以不同的方式更新项目.
我也想知道这种方法是否合适.
在开发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) 我有一个带有Adapter和LayoutManager的RecyclerView.适配器有大约15种不同的ViewHolders.其中一个包含加载外部内容的WebView(其中99%是YouTube以外的视频).当任何适配器视图离开屏幕时出现问题 - WebView中的视频继续播放并且声音正在播放.不过,这对我来说是可以接受的.
当我转移到另一个Activity时,关键问题就开始了.视频的声音仍然存在.
当任何子视图更改可见性状态(意味着从显示中消失)时,RecyclerView是否有任何方式可以通知我?
我有一个使用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
我正在使用RecyclerView显示标记列表,并且值的每个标记都显示为CardView.但是,在向下滚动RecyclerView并向后滚动之后,卡片的某些内容会丢失,如下面的两个屏幕截图所示.滚动后,红色矩形中的内容将丢失.
在滚动之前;

在滚动之后;

我想知道它是否是RecyclerView的一个错误,并在谷歌搜索后找不到解决方案.
除标题外,所有观点都是看不见的,它们的可见性取决于标记的价值.
有谁知道为什么会这样?
我只是想更好地理解我经常用来优化的以下模式 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) 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
我有一个包含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
android ×10
android-view ×1
butterknife ×1
getview ×1
java ×1
listener ×1
listview ×1
static ×1
view ×1