引用和使用来自另一个 class 的数组

Referencing and using an array from another class

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

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

我所做的是在另一个具有 "add" 功能的 class 中制作了一个按钮。这应该将引用的文本字段中的任何内容添加到列表中。但是,我不知道如何在源代码 class 中引用按钮,所以我想我会用另一种方式来引用按钮中的数组 class.

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

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

或任意数量的输入。

请告诉我该怎么做,因为我已经尝试了所有我能想到的方法。请记住,我的添加按钮和编辑文本位于单独的 class 中。我的父列表和子列表在一个 class 中,但按钮和编辑文本在另一个中。我必须移动它吗?

首先,您需要更好地设计问题。目前读起来很糟糕。对于如此糟糕的布局,您不会得到很多答案(而且您很幸运没有被严重否决)。

不过,我想我可以帮上忙。

一定要始终正确命名变量。当您稍后阅读旧代码时,它会有很大帮助。

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

关于addHeader按钮的点击事件

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

这应该是您需要添加到 header 的全部内容。下一个有点棘手。

关于addChild按钮的点击事件

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 个文本编辑字段:一个用于 headers,一个用于 children
  • 1 个 header 列表视图(或类似控件)
  • 2 个添加按钮(addHeader 和 添加孩子)

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

PS: 上面的代码不完整。它是伪代码,可让您了解如何执行此操作。您将需要一些错误检查等,并填写我没有填写的部分。如果其中有您不清楚的部分(例如,按钮和 onClick 方法),您应该 google 一个在 android.

中实现按钮的基本教程

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