我只是想知道你们中是否有人知道如何做到这一点。我有一个具有键值对的活动,如果键等于字符串,我试图显示图像,否则不显示任何图像。
是否有人知道如何开始尝试使其正常工作?
final String splitedDouble[] = companyString.split(",,");
String[] arrayOfString = { "Beard Vape Co;beard_vape_co", "two;zwei", "three;drei" };
Hashtable<String, String> hashTable = new Hashtable<String, String>();
for(String s: arrayOfString){
String[] array = s.split(";");
String sKey ="", sValue="";
if(array.length > 1){
sKey = array[0]; sValue = array[1];
hashTable.put(sKey, sValue);
if(sKey.toString().equals(liquidCompany)){
imageView.setImageResource(Integer.parseInt("R.drawable." + sValue.toString()));
}
}
这就是我对循环的看法
答案 0 :(得分:0)
如果您已经使用ImageView设置了布局,则可以使用View.setVisibility显示或隐藏ImageView:
ImageView image = findViewById(R.id.image);
if (key.equals("String"))
image.setVisibility(View.VISIBLE);
else
image.setVisibility(View.GONE);
如果要在布局充气后更改图像,可以使用
image.setImageResource(R.drawable.whatever);
答案 1 :(得分:0)
这是XY问题的经典案例。您真正的问题是从字符串获取资源ID。在SO之前已经回答了很多次。 link
试试这个:
final String splitedDouble[] = companyString.split(",,");
String[] arrayOfString = { "Beard Vape Co;beard_vape_co", "two;zwei", "three;drei" };
Hashtable<String, String> hashTable = new Hashtable<String, String>();
for(String s: arrayOfString){
String[] array = s.split(";");
String sKey ="", sValue="";
if(array.length > 1){
sKey = array[0]; sValue = array[1];
hashTable.put(sKey, sValue);
imageView.setImageResource(getResId("R.drawable." + sValue.toString(), Drawable.class));
imageView.setVisiblity(View.GONE);
if(sKey.toString().equals(liquidCompany)){
imageView.setVisiblity(View.VISIBLE);
}
}
public static int getResId(String resName, Class<?> c) {
try {
Field idField = c.getDeclaredField(resName);
return idField.getInt(idField);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
答案 2 :(得分:0)
您的图片无法显示的原因是因为
imageView.setImageResource(Integer.parseInt("R.drawable." + sValue.toString()));
您没有设置图片的正确资源ID。 Integer.parseInt("R.drawable." + sValue.toString())
返回无效的标识符。
您可以按照以下示例进行操作。
Class<?> drawableClass = R.drawable.class;
try {
Field icLauncherField = drawableClass.getDeclaredField("ic_launcher");
imageView.setImageResource(Integer.valueOf(icLauncherField.getInt(null)));
} catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 3 :(得分:0)
所以这是我遇到的问题的解决方案,我知道它不是最漂亮或最好的代码,但它具有我正在寻找的功能。感谢大家对这个问题的所有帮助!
String[] arrayOfString = { "Beard Vape Co.;beard_vape_co", "two;zwei", "three;drei" };
List<String> sKeyArray = new ArrayList<>();
List<String> sValueArray = new ArrayList<>();
for(String s: arrayOfString) {
String[] array = s.split(";");
String sKey = "", sValue = "";
if (array.length > 1) {
sKey = array[0];
sValue = array[1];
sKeyArray.add(sKey);
sValueArray.add(sValue);
}
}
for(int i = 0; i < sKeyArray.size(); i++){
if(sKeyArray.get(i).toString().contains(liquidCompany.trim().toString())){
testingText.append(sKeyArray.get(i).toString());
testingText.append(sValueArray.get(i).toString());
int resID = getResources().getIdentifier(sValueArray.get(i).toString() , "drawable", getPackageName());
imageView.setImageResource(resID);
}
}