当前位置: 首页 > 知识库问答 >
问题:

如何使用变量从其他活动按钮在自定义列表视图Android Studio

马梓
2023-03-14

我目前正在为大学开发一个裸体游戏应用程序。在应用程序的商店活动中,我创建了一个自定义列表视图,以显示商店中的商品。每个按钮都有不同的价格等,所以按钮都应该完成不同的任务。以下是通过getView()方法中的switch语句完成的。然而,这些语句中使用的变量是商店活动所必需的,我只是想知道是否有人可以让我知道如何在自定义适配器中使用这些变量。任何帮助都会很好,我对这方面还不太熟悉。

public class CustomBaseAdapter extends BaseAdapter {

    Context context;
    String[] listText;
    int[] listImage;

    LayoutInflater inflater;



    public CustomBaseAdapter(Context ctx, String [] itemList, int [] imageList, Button []
            ButtonList){

        this.context = ctx;
        this.listText = itemList;
        this.listImage = imageList;

        inflater = LayoutInflater.from(ctx);

    }


    @Override
    public int getCount() {
        return listText.length;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        convertView = inflater.inflate(R.layout.activity_custom_list_view, null);
        TextView txtView = (TextView) convertView.findViewById(R.id.textView);
        ImageView itemImg = (ImageView) convertView.findViewById(R.id.imageIcon);
        Button buttonInd = (Button) convertView.findViewById(R.id.buyButton);
        txtView.setText(listText[position]);
        itemImg.setImageResource(listImage[position]);

        buttonInd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (position){
                    case 0:
                        if (firstB==false){
                            if(gold>=1000){
                                firstB = true;
                                gold = gold - 1000;
                                dmgMultiplier = dmgMultiplier *2;
                                setDataShop(dmgMultiplier, gold, LoggedInUser);
                                setDataShopBought(firstbBin, secondbBin,
                                        thirdbBin,forthbBin,
                                        fithbBin,sixthbBin,
                                        seventhbBin,LoggedInUser);
                            }
                        }
                        break;
                    case 1:
                        if (secondB==false){
                            if(gold>=3000){
                                secondB = true;
                                gold = gold - 3000;
                                dmgMultiplier = dmgMultiplier *5;
                                Shop.setDataShop(dmgMultiplier, gold, LogIn.getUser());
                                Shop.setDataShopBought(firstbBin, secondbBin,
                                        thirdbBin,forthbBin,
                                        fithbBin,sixthbBin,
                                        seventhbBin,LoggedInUser);
                            }
                        }
                        break;
                    case 2:
                        if (thirdB==false){
                            if(gold>=8000){
                                thirdB = true;
                                gold = gold - 8000;
                                dmgMultiplier = dmgMultiplier *10;
                                Shop.setDataShop(dmgMultiplier, gold, LogIn.getUser());
                                Shop.setDataShopBought(firstbBin, secondbBin,
                                        thirdbBin,forthbBin,
                                        fithbBin,sixthbBin,
                                        seventhbBin,LoggedInUser);
                            }
                        }
                        break;
                    case 3:
                        if (fourthB==false){
                            if(gold>=12000){
                                fourthB = true;
                                gold = gold - 12000;
                                dmgMultiplier = dmgMultiplier *15;
                                Shop.setDataShop(dmgMultiplier, gold, LogIn.getUser());
                                Shop.setDataShopBought(firstbBin, secondbBin,
                                        thirdbBin,forthbBin,
                                        fithbBin,sixthbBin,
                                        seventhbBin,LoggedInUser);
                            }
                        }
                        break;
                    case 4:
                        if (fithB==false){
                            if(gold>=20000){
                                fithB = true;
                                gold = gold - 20000;
                                dmgMultiplier = dmgMultiplier *30;
                                Shop.setDataShop(dmgMultiplier, gold, LogIn.getUser());
                                Shop.setDataShopBought(firstbBin, secondbBin,
                                        thirdbBin,forthbBin,
                                        fithbBin,sixthbBin,
                                        seventhbBin,LoggedInUser);
                            }
                        }
                        break;
                    case 5:
                        if (sixB==false){
                            if(gold>=40000){
                                sixB = true;
                                gold = gold - 40000;
                                dmgMultiplier = dmgMultiplier *60;
                                Shop.setDataShop(dmgMultiplier, gold, LogIn.getUser());
                                Shop.setDataShopBought(firstbBin, secondbBin,
                                        thirdbBin,forthbBin,
                                        fithbBin,sixthbBin,
                                        seventhbBin,LoggedInUser);
                            }
                        }
                        break;
                    case 6:
                        if (sevenB==false){
                            if(gold>=100000){
                                sevenB = true;
                                gold = gold - 100000;
                                dmgMultiplier = dmgMultiplier *150;
                                Shop.setDataShop(dmgMultiplier, gold, LogIn.getUser());
                                Shop.setDataShopBought(firstbBin, secondbBin,
                                        thirdbBin,forthbBin,
                                        fithbBin,sixthbBin,
                                        seventhbBin,LoggedInUser);
                            }
                        }
                }
            }
        });


        return convertView;
    }
}

共有1个答案

孟俊晖
2023-03-14

在适配器中做计算和逻辑是不好的做法。

一种方法是创建一个单击侦听器界面:

public interface CustomItemClickListener {
     void onClick(int position);
}

您的ShopActive可以实现此接口:

public ShopActivity extends Activity implements CustomItemClickListener {
    
    ...
    private CustomAdapter adapter;
  
    @Override void onCreate(Bundle savedInstanceState){
        adapter = CustomAdapter(this, itemList, imageList, this)
    }

    @Override void onClick(int position){
        //Your switch code block here.
    }
}

以及您的适配器类:

public class CustomBaseAdapter extends BaseAdapter {

    Context context;
    String[] listText;
    int[] listImage;
    LayoutInflater inflater;
    CustomItemClickListener listener;

    public CustomBaseAdapter(Context ctx, String[] itemList, int[] imageList, CustomItemClickListener listener){

        this.context = ctx;
        this.listText = itemList;
        this.listImage = imageList;

        inflater = LayoutInflater.from(ctx);
        this.listener = listener;

    }
    ...
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ...
        buttonInd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onClick(position);
            }
        });
    }
    ...
}
 类似资料:
  • 我们为应用程序设计了一些自定义控件,如CustomButton、CustomTexView等。这些控件定义应用程序的主题并具有标准大小。现在我们正计划在我们的项目中使用SwiftUI。如何在SwiftUI结构中使用这些自定义控件? 即。 }

  • 我已经在IB中设计了我的自定义单元,将其子类化,并将我的插座连接到我的自定义类。我在单元格内容中有三个子视图,它们是:UIView(cdView)和两个标签(titleLabel和emailLabel)。根据每行可用的数据,有时我希望在单元格中显示UIView和两个标签,有时只显示两个标签。我想做的是这样设置约束,如果我将UIView属性设置为hidden,或者将其从superview中删除,则两

  • 我对Android开发非常陌生,这是我的第一个Android应用程序。 下面是我的MainActivity布局: 这是MainActivity的组件树

  • 问题内容: 这是我的代码: 当用户输掉游戏并想重试时,将提示此代码。但是,当我按重试超过4次时,应用程序崩溃。我怀疑是内存泄漏。在logcat中进行了一些测试之后,我设法发现该活动在重试后仍在运行。 我的计划是用两件事来解决这个问题。回收我的可绘制对象并结束第一个活动。但是,即使我打完电话,第一个活动也没有关闭。有什么帮助吗?(到目前为止,在代码的其他部分使用getContext()仍然有效。 编

  • 我已经自定义了应用程序中的所有单选按钮,但是listPreference中的单选按钮没有被自定义。 我用了这个名为btn_radio.xml 这是自定义的无线电按钮,它扩展了Android自定义单选按钮 在我的应用程序的主题中,我做了这些更改 此更改自定义我的应用程序中除列表首选项中的单选按钮之外的所有单选按钮

  • 在Mainactive类中,我无法访问gamePanel变量或对象。在程序中稍后的其他类中,它运行良好。我遇到了以下错误: 类主要活动: 类游戏面板: