Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RecyclerView中的imageButton未显示_Java_Android_Android Recyclerview_Playing Cards - Fatal编程技术网

Java RecyclerView中的imageButton未显示

Java RecyclerView中的imageButton未显示,java,android,android-recyclerview,playing-cards,Java,Android,Android Recyclerview,Playing Cards,我已经在你们的论坛上潜伏了一段时间了,他们在我遇到的各种问题上帮了我很大的忙,所以谢谢!:D 我正在尝试为android创建我的第一个应用程序,这是一款名为shithead的纸牌游戏,我和我的朋友过去经常玩这个游戏 我决定用回收器来展示你的手。我需要能够动态添加按钮(与卡图像)在运行时显示。据我所知,我需要一个适配器 使用“https://guides.codepath.com/android/Using the recyclerview”上的便捷指南,并尝试为自己的目的对其进行修改,我已经非常

我已经在你们的论坛上潜伏了一段时间了,他们在我遇到的各种问题上帮了我很大的忙,所以谢谢!:D

我正在尝试为android创建我的第一个应用程序,这是一款名为shithead的纸牌游戏,我和我的朋友过去经常玩这个游戏

我决定用回收器来展示你的手。我需要能够动态添加按钮(与卡图像)在运行时显示。据我所知,我需要一个适配器

使用“https://guides.codepath.com/android/Using the recyclerview”上的便捷指南,并尝试为自己的目的对其进行修改,我已经非常接近于实现这一功能的测试运行。当我在Android Studio的模拟器上运行该程序时,它会显示以下内容:

我觉得我已经非常接近了,我只是缺少了一些使用android或android studio的关键语法

在我的卡对象中,我构建了一个字符串idText,该字符串与我保存在项目的mipmap hdpi、mipmap xhdpi等文件夹中的卡图像相关(如下所示的mipmap hdpi)

我的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);
}
到目前为止,我的主要活动课做得很少。它初始化一个玩家、我和一副牌对象。然后,它给了我6张卡从顶部的非缓冲甲板,又名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));
}

就代码的值而言,牌组、玩家和牌对象似乎都在按预期工作,因为结果显示正确显示“Dr_StrangeKill”已收到2-7颗钻石,但没有显示牌图像本身!这是我第一次在任何IDE(eclipse、visualstudio、androidstudio)中使用图像,我感觉自己非常接近,但在某些小但关键的方面却很差。任何帮助都将不胜感激

我建议您将图像放在一个可绘制文件夹中,因为mipmap文件夹用于启动图标,如果您想支持不同的屏幕密度,下面是一个演示如何为每个屏幕密度创建一个可绘制文件夹的示例,然后您应获得如下图像标识符:

context.getResources().getIdentifier(idText, "drawable", context.getPackageName());

看起来您正在尝试按名称获取图像资源的标识符。在这种情况下,您可以尝试:

返回context.getResources().getIdentifier(idText,“mipmap”,context.getPackageName())

但不建议这样做。有关getIdentifier()的信息,请参见文档 ,java.lang.String,java.lang.String)


您可以将id(一个int)添加到您的卡对象中,然后像新卡一样实例化(R.mipmap.hearts\u 2,2,“hearts”),或者以您正在实例化的方式实例化(似乎您使用的是公共字段,而不是构造函数),然后在适配器中获取该id以在imageview上设置。

是否显示任何内容,或者仅仅是
ImageButton
没有?为什么要将图像存储在mipmap文件夹中,但要从drawable获取资源id?@JediBurrell-它显示一些小的灰色框,似乎对单击做出响应(它们闪烁),但里面没有图像。我猜它们是android studio中最小的默认按钮displays@nabillondon-因为我对这玩意儿一窍不通。我应该如何引用这些图像?据我所知,引用drawable允许android studio根据显示的屏幕正确选择正确的图像大小。。。。我应该选一个吗?AKA返回context.getResources().getIdentifier(“mipmap hdpi/@+id/”+idText,null,context.getPackageName());如此接近,却又如此遥远!RecyclerView现在显示卡片,并按预期滚动,但显示的所有卡片都是黑桃王牌,与RankString和SuitString的最终索引相关。从牌组中拾取的牌对象仍然正确,因为它正确地显示了图像旁边的文本“2个黑桃”等,但不知何故,引用的图像始终是黑桃的王牌!。知道了!我的idText字段和getIdText方法都是静态的,而我的文本字段不是静态的。在牌组的创建过程中,最后一张实例化的牌是黑桃王牌,因此每次调用getIdText()都将返回黑桃王牌。非常感谢你的帮助@谢谢你的帮助:请考虑接受它作为答案。
context.getResources().getIdentifier(idText, "drawable", context.getPackageName());