【发布时间】:2017-03-29 19:01:17
【问题描述】:
一段时间以来,我一直潜伏在您的论坛上,他们在我遇到的各种问题上为我提供了极大的帮助,非常感谢! :D
我正在尝试创建我的第一个 Android 应用,它是一款名为shithead 的纸牌游戏,我和我的朋友过去经常玩。
我决定使用 RecyclerView 来展示你的手。我需要能够在运行时向显示器动态添加按钮(带有卡片图像)。据我所知,我需要一个适配器。
使用“https://guides.codepath.com/android/using-the-recyclerview”上的便捷指南并尝试出于自己的目的对其进行修改,我已经非常接近完成这项工作的测试运行.当我在 Android Studio 的模拟器上运行该程序时,它给了我以下显示: images displayed as grey rectangles
我觉得我必须非常接近,我只是错过了一些使用 android 或 android studio 的关键语法。
在我的 Card 对象中,我构建了一个 String 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];
}
我的卡片类中还有一个 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 张未洗牌的牌,AKA 2 - 7 的方块。然后它初始化 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)中处理图像,我觉得我离得很近,但在一些小但关键的方式上。任何帮助将不胜感激!
【问题讨论】:
-
是否有任何显示,或者只是
ImageButton没有显示? -
为什么把图片保存在mipmap文件夹,却从drawable中获取资源id?
-
@JediBurrell - 它显示小灰色框,似乎响应点击(它们闪烁)但其中没有图像。我猜它们是 android studio 显示的最小的默认按钮
-
@nabillondon - 因为我对这些东西完全是个菜鸟。我应该如何参考图像?据我所知,引用drawable允许android studio根据它显示的屏幕正确选择正确的图像尺寸......我应该选择一个吗? AKA return context.getResources().getIdentifier("mipmap-hdpi/@+id/" + idText, null, context.getPackageName());
标签: java android android-recyclerview playing-cards