我对如何使用CursorRecyclerViewAdapter使用multipleView类型有疑问,我可以使用两种布局,但只获得第一个项目的头,而不是所有项目的头。如何做到这一点,到目前为止,我尝试过的是:
import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
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;
import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;
import java.util.List;
import model.CustomerModel;
import timertracker.precision.timetracker.R;
import timertracker.precision.timetracker.RecyclerViewFastScroller;
public class CustomerListAdapter extends CursorRecycleViewAdapter<CustomerListAdapter.ViewHolder> implements View.OnClickListener , RecyclerViewFastScroller.BubbleTextGetter{
int position;
Cursor cursor;
ColorGenerator generator = ColorGenerator.MATERIAL;
private OnItemClickListener onItemClickListener;
List<CustomerModel>list;
public static final int ITEM_TYPE_NORMAL = 1;
public static final int ITEM_TYPE_HEADER = 0;
public CustomerListAdapter(Context mContext, Cursor cursor) {
super(mContext, cursor);
}
public void setOnItemClickListener(final OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
@Override
public String getTextToShowInBubble(int pos) {
return Character.toString(cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_Name)).charAt(0));
}
public static class MyViewHolder extends ViewHolder {
TextView textname;
TextView status;
TextView textphnum;
TextView textdegree;
TextView textemail;
ImageView call;
TextView header;
public MyViewHolder(final View itemView) {
super(itemView);
this.textname = (TextView) itemView.findViewById(R.id.subject);
this.status = (TextView) itemView.findViewById(R.id.customerstatus);
this.textemail = (TextView) itemView.findViewById(R.id.username);
this.textdegree = (TextView) itemView.findViewById(R.id.status);
this.call = (ImageView) itemView.findViewById(R.id.imageView);
}
}
public static class Headers extends ViewHolder {
TextView header;
public Headers(final View itemView) {
super(itemView);
this.header = (TextView) itemView.findViewById(R.id.header);
}
}
@Override
public int getItemViewType(int position) {
if(position==ITEM_TYPE_NORMAL)
return 1;
return 0;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View v) {
super(v);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
if(viewType==ITEM_TYPE_NORMAL){
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.customeradapterview, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(view);
view.setOnClickListener(this);
return myViewHolder;
}
else if(viewType==ITEM_TYPE_HEADER){
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.header, parent, false);
Headers headers = new Headers(view);
return headers;
}
return null;
}
@Override
public void onBindViewHolder(ViewHolder holder, Cursor cursor) {
String customrename = cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_Name));
String email=cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_EmailID));
if(holder.getItemViewType()==1) {
MyViewHolder holders=(MyViewHolder)holder;
TextView textViewName = holders.textname;
TextView textstatus = holders.status;
TextView textphnumbr = holders.textdegree;
TextView textemail=holders.textemail;
// ImageView call=holders.call;
if (email.length() >= 20) {
String s = email.substring(0, 20) + "...";
textemail.setText(s);
} else {
textemail.setText(email);
}
//textemail.setText(cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_EmailID)));
String status = cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_Status));
if (status.equals("Active")) {
textstatus.setTextColor(Color.parseColor("#006400"));
} else {
textstatus.setTextColor(Color.parseColor("#8B0000"));
}
textstatus.setText(status);
textphnumbr.setText(cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_MobileNumber)));
String s1 = customrename.substring(0, 1).toUpperCase() + customrename.substring(1).toLowerCase();
textViewName.setText(s1);
ColorGenerator generator = ColorGenerator.DEFAULT;
String com = s1.substring(0, 1);
TextDrawable drawable = TextDrawable.builder()
.buildRound((com).toUpperCase(), generator.getRandomColor());
holders.call.setImageDrawable(drawable);
}
else if(holder.getItemViewType()==0) {
Headers header=(Headers)holder;
String s1 = customrename.substring(0, 1).toUpperCase() + customrename.substring(1).toLowerCase();
String com = s1.substring(0, 1);
header.header.setText(com);
}
}
@Override
public void onClick(View v) {
final RecyclerView recyclerView = (RecyclerView) v.getParent();
position = recyclerView.getChildLayoutPosition(v);
if (position != RecyclerView.NO_POSITION) {
final Cursor cursor = this.getItem(position);
this.onItemClickListener.onItemClicked(cursor);
}
}
public interface OnItemClickListener {
void onItemClicked(Cursor cursor);
}
}
如果我删除OnBindViewWholder中的条件,下面是我的Logcat消息:
以下是完整的解决方案:
public static final int HEADER_VIEW = 0;
public static final int NORMAL_VIEW = 1;
private String headerName="";
getItemViewType(Cursor cursor) {
//Based on your Header and Item view condition return either the header view or normal view.
String customrename = cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_Name));
String s1 = customrename.substring(0, 1).toUpperCase() + customrename.substring(1).toLowerCase();
String headerNameTemp = s1.substring(0, 1);
if(headerNameTemp.equals(headerName))
{
return NORMAL_VIEW;
}
else
{
headerName=headerNameTemp;
return HEADER_VIEW;
}
}
@Override
public int getItemViewType(int position) {
Cursor cursor = (Cursor) getItem(position);
return getItemViewType(cursor);
}
希望能有所帮助。
问题内容: 我正在尝试使用Guava文档示例中所示的方式在运行时查找类型参数: 运行此代码时,将得到输出。为什么不反而变得呢? 问题答案: 此“ hack”不适用于运行时类型的值。 Java无法在此处实例化类时传播推断的类型参数 到宣言 因此,不知道应该指的是什么。 该的Javadoc状态 构造一个新的类型标记,同时 在的上下文中解析自由类型变量 。 客户端创建一个空的匿名子类。 这样做会将类型参
知道如何根据Jackson的ObjectMapper对象和特定的Class检索给定json路径的Java类型吗? 假设我们有 Jackson的ObjectMapper我想找到一种方法,将字符串值反序列化到给定路径上由字段表示的类型的对象(或至少获取其类型),例如。 给定“/accountOwner/age”和“25”得到25(整数类型) 给定“/accountOwner/active”和“true
问题内容: 我是selenium测试的新手。我想使用selenium获取css类名。我正在使用eclipse和Java进行开发。 有什么方法可以使用selenium获得类名“ odd”或“ even”?一世 问题答案: 是的,您可以根据需要使用功能。 指定需要知道其类的元素的Xpath。 谢谢。
问题内容: 我使用PDO和MySQL,出于某种原因,当从数据库中获取int类型的值时,PDOStatement返回的是数字的字符串表示形式,而不是数字类型的值。如何防止这种情况发生? 我注意到有一个PDO类的属性:应该可以解决这个问题,但是在尝试修改它时,它抛出一个错误,指出该属性对MySQL驱动程序无效。 查询数据库时,获取字符串而不是数字是否正常? 问题答案: 我不认为可以在PHP 5.2中完
我有以下类桥联图: 我将JUnit测试用例编写为: 但我不知道该断言什么:
当我执行时,它也打印和,我如何在Python中使用selenium只获取示例文本?