Java ArrayList、ListView和button

Java ArrayList、ListView和button,java,android,listview,arraylist,android-button,Java,Android,Listview,Arraylist,Android Button,我花了几天时间研究,但还没有找到我想要的答案,所以也许你们可以帮我一点忙 我的应用程序是一个交易卡组生成器。我有两个ArrayList,database和currentDeck,它们都在正常工作。我试图完成的任务是将数据库的选定项作为新项添加到currentDeck中 以下是主要方法: public class DeckBuilderActivity extends ActionBarActivity { ArrayList<Card> database = new ArrayLi

我花了几天时间研究,但还没有找到我想要的答案,所以也许你们可以帮我一点忙

我的应用程序是一个交易卡组生成器。我有两个ArrayList,database和currentDeck,它们都在正常工作。我试图完成的任务是将数据库的选定项作为新项添加到currentDeck中

以下是主要方法:

public class DeckBuilderActivity extends ActionBarActivity {

ArrayList<Card> database = new ArrayList<Card>(); //create new arraylist of datatype card
ArrayList<Card> currentDeck = new ArrayList<Card>(); //create arraylist for currently loaded deck

@Override
protected void onCreate(Bundle savedInstanceState) {
    Intent intent = getIntent();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_deck_builder);

    //begin method to create main database.
    cardfightMainDatabase(database);

    //format display in listview
    DatabaseAdapter adapter = new DatabaseAdapter(this, database);
    ListView lv = (ListView) findViewById(R.id.card_database_listview);
    lv.setAdapter(adapter);

    //format display in deck view
    DeckAdapter adapter2 = new DeckAdapter(this, currentDeck);
    GridView gv = (GridView) findViewById(R.id.deckGridView);
    gv.setAdapter(adapter2);

    //set up click event
    AdapterView.OnItemClickListener mMessageClickedHandler = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView parent, View v, int position, long id) {

            //link image view
            ImageView iv = (ImageView) findViewById(R.id.cardDisplay);

            //link scrollable textview
            TextView tv = (TextView) findViewById(R.id.cardDataDisplay);

            // Do something in response to the click
            //set image id
            int imageId = database.get(position).getCardImgID();

            //display image to imageview
            iv.setImageResource(imageId);

            //display text to textview
            //Print card name, expansion, card number, skill and flavor text to scrollable textview
            tv.setText(database.get(position).getCardName() + "\nExpansion Set: " + database.get(position).getExpansion() +
                        "\nCard #: " + database.get(position).getCardNum() + "\nSkill:\n" + database.get(position).getUnitSkill()
                + "\nFlavor Text:\n" + "\"" + database.get(position).getCardLore()+ "\"");

        }
    };

    lv.setOnItemClickListener(mMessageClickedHandler);
} //end OnCreate Method

并将其放入数据库适配器的getView()方法中,但无论我在其中添加了什么,都无法使其工作。有什么建议吗?

我想出来了。通过在on item click方法中放置onClick方法,我得到了我想要的结果。我真的很难过,事情就这么简单。我花了四天时间想弄明白这件事

     //set up click event for database
    AdapterView.OnItemClickListener mMessageClickedHandler = new AdapterView.OnItemClickListener() {
        public void onItemClick(final AdapterView parent, View v, final int position, long id) {
            //link image view
            ImageView iv = (ImageView) findViewById(R.id.cardDisplay);
            //link scrollable textview
            TextView tv = (TextView) findViewById(R.id.cardDataDisplay);
            // Do something in response to the click
            //set image id
            int imageId = database.get(position).getCardImgID();
            //display image to imageview
            iv.setImageResource(imageId);

            //Configure button click event
            addButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //add card from database to current deck
                    currentDeck.add(database.get(position));
                    adapter2.notifyDataSetChanged();
                }
            });

我想出来了。通过在on item click方法中放置onClick方法,我得到了我想要的结果。我真的很难过,事情就这么简单。我花了四天时间想弄明白这件事

     //set up click event for database
    AdapterView.OnItemClickListener mMessageClickedHandler = new AdapterView.OnItemClickListener() {
        public void onItemClick(final AdapterView parent, View v, final int position, long id) {
            //link image view
            ImageView iv = (ImageView) findViewById(R.id.cardDisplay);
            //link scrollable textview
            TextView tv = (TextView) findViewById(R.id.cardDataDisplay);
            // Do something in response to the click
            //set image id
            int imageId = database.get(position).getCardImgID();
            //display image to imageview
            iv.setImageResource(imageId);

            //Configure button click event
            addButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //add card from database to current deck
                    currentDeck.add(database.get(position));
                    adapter2.notifyDataSetChanged();
                }
            });

不能让它工作怎么办?你试了什么?你想发生什么?实际发生了什么?我试图获取项目的视图位置,并通过将两个ArrayList传递给按钮,执行一个操作,将“数据库”的选定项目添加到“当前组”。我一直在搜索示例,每个答案都指向使用onClickListener,但是如何为获取ArrayList的按钮创建onClickListener呢?我是否必须创建自定义onClickListener?是否可以将ListView视图作为参数传递给按钮,或者我是否应该为按钮创建一个与getView方法类似的完全onClickListener?与其在注释中描述您所做的事情,不如编辑您的问题以显示您所做的事情(即代码).无法让它工作怎么办?你试了什么?你想发生什么?实际发生了什么?我试图获取项目的视图位置,并通过将两个ArrayList传递给按钮,执行一个操作,将“数据库”的选定项目添加到“当前组”。我一直在搜索示例,每个答案都指向使用onClickListener,但是如何为获取ArrayList的按钮创建onClickListener呢?我是否必须创建自定义onClickListener?是否可以将ListView视图作为参数传递给按钮,或者我是否应该为按钮创建一个与getView方法类似的完全onClickListener?与其在注释中描述您所做的事情,不如编辑您的问题以显示您所做的事情(即代码).无法让它工作怎么办?你试了什么?你想发生什么?实际发生了什么?我试图获取项目的视图位置,并通过将两个ArrayList传递给按钮,执行一个操作,将“数据库”的选定项目添加到“当前组”。我一直在搜索示例,每个答案都指向使用onClickListener,但是如何为获取ArrayList的按钮创建onClickListener呢?我是否必须创建自定义onClickListener?是否可以将ListView视图作为参数传递给按钮,或者我是否应该为按钮创建一个与getView方法类似的完全onClickListener?与其在注释中描述您所做的事情,不如编辑您的问题以显示您所做的事情(即代码)。
    addButton = (Button) findViewById(R.id.addToDeckButton);
            addButton.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v, int position) {

                    currentDeck.add(database.get(position));
                    adapter.notifyDataSetChanged();
                }
     //set up click event for database
    AdapterView.OnItemClickListener mMessageClickedHandler = new AdapterView.OnItemClickListener() {
        public void onItemClick(final AdapterView parent, View v, final int position, long id) {
            //link image view
            ImageView iv = (ImageView) findViewById(R.id.cardDisplay);
            //link scrollable textview
            TextView tv = (TextView) findViewById(R.id.cardDataDisplay);
            // Do something in response to the click
            //set image id
            int imageId = database.get(position).getCardImgID();
            //display image to imageview
            iv.setImageResource(imageId);

            //Configure button click event
            addButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //add card from database to current deck
                    currentDeck.add(database.get(position));
                    adapter2.notifyDataSetChanged();
                }
            });