我有一个自定义基础适配器,它将接收数据数组列表。从这里开始,它将使用自定义按钮填充 GridView 。它做得非常完美并填满了 GridView 。问题是。我想设置一个按钮来改变颜色。当我这样做时,由于 View 被回收,它也会更改下一个被回收的 View 。前任。单击位置 0 的按钮 1。同时更改位置 13 的按钮。现在,当我进行一些调试时,我发现它也更改了一些属性。我想知道是否可以按原样创建我的 View 而无需回收 View 的任何部分。
我已经看到了一些关于使用 stableID 的事情,但即使我已将其覆盖为 true。目前仍然没有改变它。
static class CategoryButtonAdapter extends BaseAdapter
{
private Context mContext;
private ArrayList<DishCategory> dishCategories;
private ArrayList<Dish> dishItems;
static ArrayList<DishCategoryButton> mDishCategoryButtons;
//will take in an array list created in the orderlayout that will be the
//dish category. This will be the from where we will the count for the adapter
public CategoryButtonAdapter(Context context, ArrayList<DishCategory> dishCategories)
{
this.mContext = context;
this.dishCategories = dishCategories;
dishItems = dishCategories.get(0).getDishes();
}
public int getCount()
{
return dishCategories.size();
}
//to be implementated later so it can b3e used to find menu categories
@Override
public DishCategory getItem(int position)
{
return dishCategories.get(position);
}
public void getDishCategoryButtons()
{
if(mDishCategoryButtons.size() == 0)
{
System.out.println("The number of buttons in this adapapter is " + mDishCategoryButtons.size());
}
else
{
System.out.println("The number of buttons in this adapapter is " + mDishCategoryButtons.size());
}
}
public long getItemId(int position)
{
return dishCategories.get(position).getDishCategoryID();
}
@Override
public boolean hasStableIds() {
//return super.hasStableIds(); //To change body of generated methods, choose Tools | Templates.
return true;
}
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
DishCategoryButton button = null;
//button to be created
if(convertView == null )
{
holder = new ViewHolder();
//if it is not recycled, initialize some new attributes
button = new DishCategoryButton(this.mContext,dishCategories.get(position));
button.setLayoutParams(new GridView.LayoutParams(100,100));
button.setPadding(2,2,2,2);
//convertView.setTag(holder);
button.setTag(holder);
}
else
{
//holder = (ViewHolder)convertView.getTag();
button = (DishCategoryButton) convertView;
}
//setButton to the description of the category
//mDishCategoryButtons.add(button);
button.setText((dishCategories.get(position).getDescription()));
//this can be changed later to change the sex appeal of the app
//for now it will be plain
button.setId(position);
//.setOnClickListener(new View.OnClickListener()
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
DishCategoryButton dishCategoryButton = (DishCategoryButton)v;
PaintDrawable drawable = (PaintDrawable) dishCategoryButton.getBackground();
System.out.println("Dish button position is " + dishCategoryButton.getId());
//System.out.println("The position from the array says it is at " + position);
System.out.println("Dish Category is " + dishCategoryButton.getDishCategory().getDescription());
System.out.println("Is it currently selected " + dishCategoryButton.getIsSelected());
int color = drawable.getPaint().getColor();
System.out.println("Color is " + color);
dishCategoryButton.setIsSelected(true);
drawable = (PaintDrawable) dishCategoryButton.getBackground();
color = drawable.getPaint().getColor();
System.out.println("Color is " + color);
System.out.println("hi");
// The toggle is enabled
}
});
//new loadDishItems(categoryButtons.get(position).getDescription()));
return button;
}
不用担心 View 持有者。那是试图阻止回收。有关如何获得此信息的任何线索或想法?
这是我的按钮
public class DishCategoryButton extends Button
{
private DishCategory dishCategory = new DishCategory();
private Boolean isSelected = false;
public DishCategoryButton(Context context, DishCategory dishCategory)
{
super(context);
this.dishCategory = dishCategory;
isSelected = false;
setTextColor(Color.WHITE);
setBackgroundDrawable(new PaintDrawable(Color.BLACK));
}
public DishCategory getDishCategory()
{
return dishCategory;
}
public void setDishCategory(DishCategory dishCategory)
{
this.dishCategory = dishCategory;
}
public Boolean getIsSelected() {
return isSelected;
}
public void setIsSelected(Boolean isSelected) {
this.isSelected = isSelected;
if(isSelected == true)
{
setTextColor(Color.WHITE);
setBackgroundDrawable(new PaintDrawable(Color.GREEN));
}
else
{
setTextColor(Color.WHITE);
setBackgroundDrawable(new PaintDrawable(Color.BLACK));
}
}
最佳答案
更好的方法是使用
recyclerView.getRecycledViewPool().setMaxRecycledViews(VIEW_TYPE,0);
您必须注意,这可能会降低 RecyclerView 的性能。
您可以重写 getItemViewType 方法,如下所述
@Override
public int getItemViewType(int position) {
if (position == feedElements.size())
return 3;
else if (feedElements.get(position).getType() == 1)
return 1;
else
return 2;
}
关于android - 防止适配器回收 ScrollView (Edit 永远不会这样做。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20721752/
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
当我执行>rvminstall1.9.2时一切顺利。然后我做>rvmuse1.9.2也很顺利。但是当涉及到ruby-v时..sam@sjones:~$rvminstall1.9.2/home/sam/.rvm/rubies/ruby-1.9.2-p136,thismaytakeawhiledependingonyourcpu(s)...ruby-1.9.2-p136-#fetchingruby-1.9.2-p136-#downloadingruby-1.9.2-p136,thismaytakeawhiledependingonyourconnection...%Total%Rece
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc
我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
我是PHP开发人员,目前我正在学习Rails(3),当然还有Ruby。Idon'twanttobelieveinmagic因此,我尽可能多地了解Rails“背后”发生的事情。我发现有趣的是ActiveRecord模型中的方法调用,如has_one或belongs_to。我试图重现它,并提供了一个天真的例子:#has_one_test_1.rbmoduleFooclassBasedefself.has_oneputs'Willitwork?'endendendclassModel2如我所料,只要运行这个文件就会输出“Willitwork?”。在搜索Rails源代码时,我找到了负责的函数: