【发布时间】:2019-05-29 22:10:46
【问题描述】:
两个按钮应该更新“Stickers.java”中的值“PACK_LIB”。
当他们覆盖字符串时,方法 setDefaultStickerPack() 应该重新启动。
单击按钮 b1 或 b2 时,值“PACK_LIB”将被值“allstickers”或“teststickers”覆盖。
按钮 b1 或 b2 如何在 setDefaultStickerPack() 中重新启动方法“if(in==null)”?
-------KeyboardService.java
final Button button2 = (Button) mainBoard.findViewById(R.id.b2);
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Stickers.PACK_LIB = "allstickers";
stickers.setDefaultStickerPack();
showStickers();
}
});
final Button button3 = (Button) mainBoard.findViewById(R.id.b3);
button3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Stickers.PACK_LIB = "teststickers";
stickers.setDefaultStickerPack();
showStickers();
}
});
-------Stickers.java
public static String PACK_LIB ="";
public void setDefaultStickerPack() {
checkVersion(true);
InputStream in = null;
String packList[]=new String[0];
String PACK_APP="pack_app";
String PACK_ICON="pack_on.png";
String curAssets="";
try {
in = lContext.getAssets().open(PACK_APP+"/"+PACK_ICON);
curAssets=PACK_APP;
packList = lContext.getAssets().list(curAssets);
} catch (IOException e) {
e.printStackTrace();
}
if(in==null) {
try {
in = lContext.getAssets().open(PACK_LIB+"/"+PACK_ICON);
curAssets=PACK_LIB;
packList = lContext.getAssets().list(curAssets);
} catch (IOException e) {
e.printStackTrace();
}
}
if (in != null) {
long packId = 1;
PackData packData = new PackData();
packData.objectId = packId;
packData.name = "ROKOmoji";
packData.iconOn = copyImgFile(in, "i" + packId + "_on");
//packData.iconOff = copyImgFile(inOff, "i" + packId + "_off");
List<StickerData> stickerData = new ArrayList<StickerData>();
long i = 0;
for (String img: packList) {
if(PACK_ICON.equals(img)){
continue;
}
InputStream sIs = null;
try {
sIs = lContext.getAssets().open(curAssets+"/"+img);
} catch (IOException e) {
e.printStackTrace();
}
if (sIs != null) {
StickerData sd = new StickerData();
i=i+1;
File file = copyImgFile(sIs, "s" + img);
sd.objectId = i;
sd.imageId = i;
sd.packId = packId;
sd.packName = packData.name;
sd.file = file;
sd.iconKey = createIconKey(file, "si" + img);
sd.mime = getMimeTypeOfFile(file.getPath());//"image/gif"
sd.url = null;
stickerData.add(sd);
}
}
packData.stickers = stickerData;
packDataListDefault.add(packData);
}
}
【问题讨论】:
-
您现有的代码出了什么问题?
-
"allstickers" 包括 20 个贴纸,而 "teststickers" 只有 5 个。当我单击“teststickers”按钮时,5 个贴纸显示在“allstickers”的 20 个贴纸下方。并且 20 个贴纸是不可见的。所以我需要向下滚动才能看到 5 个贴纸。 @okcomputer_kid
-
尝试将 setDefaultStickerPack() 设为静态并调用 Stickers.setDefaultStickerPack() 而不是创建实例贴纸。 (我不确定这是否会有所帮助,我没有完全理解)
-
如何使 setDefaultStickerPack() 静态?因为当我在代码中覆盖时,它会显示“此处不允许修改器”@okcomputer_kid
标签: java android android-studio button methods