引用和使用来自另一个 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.
中实现按钮的基本教程
祝你好运!希望这有帮助。
我正在 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.
中实现按钮的基本教程祝你好运!希望这有帮助。