我潜伏在你们的论坛有一段时间了,他们对我遇到的各种问题提供了极大的帮助,非常感谢! :D
我正在尝试为 Android 创建我的第一个应用程序,这是一款名为 shithead 的纸牌游戏,我和我的 friend 过去经常玩。
我决定使用 RecyclerView 来显示你的手。我需要能够在运行时向显示动态添加按钮(带有卡片图像)。据我所知,我需要一个适配器。
使用“https://guides.codepath.com/android/using-the-recyclerview”上的便捷指南并尝试根据我自己的目的对其进行修改我已经非常接近于进行这项工作的试运行.当我在 Android Studio 的模拟器上运行该程序时,它会显示以下内容: images displayed as grey rectangles
我觉得我必须非常接近,而且我只是缺少一些使用 android 或 android studio 的关键语法。
在我的卡片对象中,我构建了一个字符串 idText,它与我保存在项目的 mipmap-hdpi、mipmap-xhdpi 等文件夹中的卡片图像相关联(mipmap-hdpi 如下所示) mipmap-hdpi folder in Android Studio
public Card(int suitInput, int rankInput)
{
suit = suitInput;
rank = rankInput;
faceUp = false;
text = RankString[rank] + " of " + SuitString[suit];
idText = "i_" + RankString[rank] + "_of_" + SuitString[suit];
}
我的 Card 类中还有一个函数 getImageId:
public static int getImageId(Context context) {
return context.getResources().getIdentifier("drawable/@+id/" + idText, null, context.getPackageName());
}
我的 CardAdapter 中的 onBindViewHolder 方法如下:
@Override
public void onBindViewHolder(CardAdapter.ViewHolder viewHolder, int position)
{
//get the data model based on position
Card card = mCards.get(position);
//Set item views baased on views and data model
ImageButton imageButton = viewHolder.cardButton;
imageButton.setImageResource(card.getImageId(mContext));
TextView textView = viewHolder.cardText;
textView.setText(card.text);
}
我的 MainActivity 类目前做的还很少。它初始化一个玩家、我和一副纸牌对象。然后它给了我未洗牌的牌顶上的 6 张牌,也就是 2 - 7 方 block 。然后它初始化 CardAdapter。
public class MainActivity extends AppCompatActivity {
Player me;
Deck deck;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testdisplay);
//lookup the recyclerview in activity layout
RecyclerView rvCards = (RecyclerView) findViewById(R.id.rvCards);
me = new Player("Dr_StrangeKill");
deck = new Deck();
me.hand.add(deck.getCards().remove(0));
me.hand.add(deck.getCards().remove(0));
me.hand.add(deck.getCards().remove(0));
me.hand.add(deck.getCards().remove(0));
me.hand.add(deck.getCards().remove(0));
me.hand.add(deck.getCards().remove(0));
//create adapter passing in sample user data
CardAdapter adapter = new CardAdapter(this, me.hand);
//Attach the adapter to the recyclerView to populate items
rvCards.setAdapter(adapter);
//Set layout manager to position the items
rvCards.setLayoutManager(new LinearLayoutManager(this));
}
就代码的值而言,Deck、Player 和 Card 对象似乎都按预期工作,因为结果显示正确显示“Dr_StrangeKill”已收到 2 - 7 个钻石,但没有显示卡片图像本身!这是我第一次在任何 IDE(eclipse、visual studio、android studio)中处理图像,我觉得我非常接近,但在一些小但关键的方面有所不同。任何帮助将不胜感激!
最佳答案
我建议您将图像放在可绘制文件夹中,因为 mipmap 文件夹用于启动器图标,如果您想支持不同的屏幕密度,这里有 link这向您展示了如何为每个屏幕密度创建一个可绘制文件夹,之后您应该像这样获得您的图像标识符:
context.getResources().getIdentifier(idText, "drawable", context.getPackageName());
关于java - RecyclerView 中的 imageButton 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43102000/