我正在为我正在制作的应用程序在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
或任意数量的输入。
请让我知道如何做到这一点,因为我已经尝试了我能想到的一切。请记住,我的添加按钮和编辑文本位于单独的类中。我的父和子列表在一个类中,但按钮和编辑文本在另一个类中。我要搬家吗?
答案 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);
那应该是大部分代码。 所以回顾一下我们有:
在按钮的onClick方法中,您的代码与上面类似。
PS:上面的代码不完整。伪代码可以让您了解如何执行此操作。您将需要进行一些错误检查等,并填写我没有的部分。如果你有不清楚的部分(例如,按钮和onClick方法),你应该谷歌一个在android中实现按钮的基本教程。
祝你好运!希望这会有所帮助。