引用和使用另一个类的数组

时间:2015-01-13 01:05:31

标签: java android arrays reference

我正在为我正在制作的应用程序在android中创建一个可扩展的列表视图。我想尝试动态添加和删除数组中的项目。

这是我使用和修改的源代码。http://androidtrainningcenter.blogspot.in/2012/07/android-expandable-listview-simple.html

我所做的是在另一个具有“添加”功能的类中创建了一个按钮。这应该添加到列表中引用的文本字段中的任何内容。但是,我无法弄清楚如何引用sourcecode类中的按钮,所以我想我会以其他方式执行它并在按钮类中引用该数组。

我该怎么做?我知道要引用另一个类的方法,我会这样做:

Methodclass test = new Methodclass();

然后使用:

 test.getGroupData();

但是,我不知道如何使用数组执行此操作并在其上调用.add()方法。

修改

这是我想要使用的代码:

    MainActivity.java
package info.androidhive.expandablelistview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import android.widget.Toast;

public class MainActivity extends Activity {

    ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    List<String> listDataHeader;
    HashMap<String, List<String>> listDataChild;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // get the listview
        expListView = (ExpandableListView) findViewById(R.id.lvExp);

        // preparing list data
        prepareListData();

        listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

        // setting list adapter
        expListView.setAdapter(listAdapter);
    }

    /*
     * Preparing the list data
     */
    private void prepareListData() {
        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();

        // Adding child data
        listDataHeader.add("Top 250");
        listDataHeader.add("Now Showing");
        listDataHeader.add("Coming Soon..");

        // Adding child data
        List<String> top250 = new ArrayList<String>();
        top250.add("The Shawshank Redemption");
        top250.add("The Godfather");
        top250.add("The Godfather: Part II");
        top250.add("Pulp Fiction");
        top250.add("The Good, the Bad and the Ugly");
        top250.add("The Dark Knight");
        top250.add("12 Angry Men");

        List<String> nowShowing = new ArrayList<String>();
        nowShowing.add("The Conjuring");
        nowShowing.add("Despicable Me 2");
        nowShowing.add("Turbo");
        nowShowing.add("Grown Ups 2");
        nowShowing.add("Red 2");
        nowShowing.add("The Wolverine");

        List<String> comingSoon = new ArrayList<String>();
        comingSoon.add("2 Guns");
        comingSoon.add("The Smurfs 2");
        comingSoon.add("The Spectacular Now");
        comingSoon.add("The Canyons");
        comingSoon.add("Europa Report");

        listDataChild.put(listDataHeader.get(0), top250); // Header, Child data
        listDataChild.put(listDataHeader.get(1), nowShowing);
        listDataChild.put(listDataHeader.get(2), comingSoon);
    }
}

how can I change all that hard-coded material and into a dynamic input? as it, what can I use add to the parent list when the user wants, and if the user wants to add to the child list of a specific parent, how do I do that?

Currently, my code has the button for adding and the edittext code in a separate class.  What I want to do is make is so that when the ADD button is pressed, it will add something to the parent list, and if I click on an element in the parent list, i get that index and add a child element to that specific parent's child-list.

how can I do this?  so basically, i want to do something like this:

remove all of this:

array.add() //hardcoded
and add a more dynamic user dependant input.

and make is something similar to this:

     test = edittext to string
     **pressed add putton**
     test is added to the list.
    **click on test in the list**
     **select add item**
     add item to the test childlist

and this should be able to work f

或任意数量的输入。

请让我知道如何做到这一点,因为我已经尝试了我能想到的一切。请记住,我的添加按钮和编辑文本位于单独的类中。我的父和子列表在一个类中,但按钮和编辑文本在另一个类中。我要搬家吗?

1 个答案:

答案 0 :(得分:1)

首先,您需要更好地设计问题样式。目前阅读起来很恐怖。对于这种糟糕的布局,你不会得到很多答案(而且你很幸运,不会被大量投票)。

但是,我想我可以提供帮助。

确保始终为变量命名。当您阅读旧代码时,它会有很多帮助。

此外,还有2个按钮:一个用于添加标题(addHeader),一个用于在标题项下添加子(addChild)。在某种列表视图中显示标题项。

在addHeader按钮的click事件

String headerItemToAdd = >>>get from text field
listDataHeader.add(headerItemToAdd);

这应该是你需要添加到标题的所有内容。下一个有点棘手。

在addChild按钮的click事件

String headerItem = >>>get the selected text from the list view, try getSelectedItem() or something.
List<String> childList = listDataChild(headerItem);
String childItemToAdd = >>>get from text field
childList.add(childItemToAdd);//at this point the item is NOT added into listDataChild. You only have a copy of the array with the extra element in it. We need to put this updated copy back into listDataChild
listDataChild.put(headerItem , childList);

那应该是大部分代码。 所以回顾一下我们有:

  • 2个文本编辑字段:一个用于标题,一个用于儿童
  • 标题(或类似控件)的列表视图
  • 2添加按钮(addHeader和 的addChild)

在按钮的onClick方法中,您的代码与上面类似。

PS:上面的代码不完整。伪代码可以让您了解如何执行此操作。您将需要进行一些错误检查等,并填写我没有的部分。如果你有不清楚的部分(例如,按钮和onClick方法),你应该谷歌一个在android中实现按钮的基本教程。

祝你好运!希望这会有所帮助。