0
我在寫一個自定義列表字段,但當我調用invalidate方法時它不起作用。屏幕總是空的,而列表字段的數據不是空的或空的! 請幫我弄清楚問題所在。
預先感謝您ListField的方法invalidate不起作用
public class FileListField extends ListField implements ListFieldCallback{
private static final Bitmap fileBitmap = Bitmap.getBitmapResource("document.png");
private static final Bitmap dirBitmap = Bitmap.getBitmapResource("emty_folder.png");
private static final Bitmap addBitmap = Bitmap.getBitmapResource("svn_added.png");
private static final Bitmap delBitmap = Bitmap.getBitmapResource("svn_deleted.png");
private static final Bitmap modBitmap = Bitmap.getBitmapResource("svn_modified.png");
private static final Bitmap novBitmap = Bitmap.getBitmapResource("svn_noversion.png");
private static final Bitmap norBitmap = Bitmap.getBitmapResource("svn_normal.png");
//static Bitmap dowBitmap = Bitmap.getBitmapResource("svn_added.png");
private BigVector bv;
public FileListField(){
super();
bv = new BigVector();
setCallback(this);
}
public void setFileModelVector(BigVector fileModelVector){
bv.removeAll();
bv.addElements(fileModelVector.getContiguousArray());
invalidate();
System.out.println("ISSSSSSSSSSSSSS CALLLLLLLLLLINNNNNNNG?");
System.out.println("DISSSPATH?"+UiApplication.isEventDispatchThread());
// invalidateRange(0, bv.size()-1);
// FileModel[] fileModelArr = new FileModel[fileModelVector.size()];
// for(int i=0;i<fileModelVector.size();i++)
// fileModelArr[i] = (FileModel)fileModelVector.elementAt(i);
// set(fileModelArr);
}
public BigVector getFileModelVector(){
// BigVector bv = new BigVector();
// for(int i=0;i<this.getSize();i++)
// bv.addElement(get(this, i));
return bv;
}
public void set(Object[] or){
}
public Object get(ListField list, int index){
return bv.elementAt(index);
}
public int getSize(){
return bv.size();
}
public int indexOfList(ListField listField, String prefix, int start) {
return getSelectedIndex();
}
public int getPreferredWidth(ListField listField) {
return Display.getWidth();
}
public void drawListRow(ListField listField, Graphics graphics
, int index, int y, int width){
System.out.println("DRWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
FileModel fileModel = (FileModel)get(listField, index);
if(fileModel.isFile())
graphics.drawBitmap(0, y, width, fileBitmap.getHeight()
, fileBitmap, 0, 0);
else
graphics.drawBitmap(0, y, width, dirBitmap.getHeight()
, dirBitmap, 0, 0);
switch(fileModel.getStatus()){
case FileModel.ADD_STATUS:
graphics.drawBitmap(0, y, width, addBitmap.getHeight()
, addBitmap, 0, 0);
break;
case FileModel.DEL_STATUS:
graphics.drawBitmap(0, y, width,delBitmap.getHeight()
, delBitmap, 0, 0);
break;
case FileModel.MOD_STATUS:
graphics.drawBitmap(0, y, width, modBitmap.getHeight()
, modBitmap, 0, 0);
break;
case FileModel.DOW_STATUS:
break;
case FileModel.NOR_STATUS:
graphics.drawBitmap(0, y, width, norBitmap.getHeight()
, norBitmap, 0, 0);
break;
default:
graphics.drawBitmap(0, y, width, novBitmap.getHeight()
, novBitmap, 0, 0);
break;
}
graphics.drawText(fileModel.getName(), fileBitmap.getWidth(), y);
}
}
我試過使用setSize,但它拋出ArrayIndexOutOfException –
好吧,我認爲這實際上是一個**不同的問題。我認爲這是因爲你正在使用'BigVector'。我相信,如果你有一個'BigVector',它被初始化爲一定的大小,假設你將有很多元素(這就是爲什麼它叫** Big ** Vector)。我認爲'bv.size()'返回的尺寸大於實際放置在矢量中的元素的數量,假設您還沒有放置很多元素。所以,你需要決定如何重寫你的代碼,以確保你正確地跟蹤實際的矢量大小。這真的是一個不同的問題... – Nate
@CongNguyen,嘗試調試或登錄你的代碼,並打印'bv.size()'的值。我敢打賭,你會發現它比你想象的要大,而且在其他地方(可能在'bv.elementAt(index)')中,你要求一個元素超過實際列表的末尾。 – Nate