动态自定义ListView?
Dynamic Custom ListView?
我正在尝试创建一个动态的自定义 ListView,用户可以在其中输入姓名和年龄,次数未知。感谢@Razgriz,他帮助我让自定义 ListView 正常工作。我现在正试图让它充满活力。我的问题是当我通过构造函数实例化 NameAndAgeClass 对象时,我的数组列表将显示我通过 onclick 输入的内容,但它也多次显示原始实例化,在 NameAndAgeClass class 中我试图为姓名和年龄创建 2 个数组列表,但出现内存不足错误。在 M class 的 for 循环中添加一个条目到 ArrayList nameAndAgeList 我如何获得我现在正在使用的 NameAndAgeClass 对象的大小,而我 < 10.
public class MainActivity extends Activity {
M gg = new M();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aa);
}
public void ss(View v){
Intent intent2 = new Intent(MainActivity.this,M.class);
startActivity(intent2);
}
public void sa(View v){
gg.addit("phil");
}
}
public class M extends Activity {
static ArrayList<NameAndAgeClass> nameAndAgeList = new
ArrayList<NameAndAgeClass>();
static NameAndAgeClass nandc = new NameAndAgeClass("bill", 88);
static int ihg = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView nameAndAgeListView = (ListView) findViewById(R.id.listView);
//create your listView with your custom object
/*
get no error with this just says not loading do i want to cancel
for(int i = 1 ; i < nameAndAgeList.size() ; i ++){
NameAndAgeClass entry = new NameAndAgeClass("lou",23);
nameAndAgeList.add(entry);
}
*/
for(int i = 1 ; i < 10 ; i ++){
NameAndAgeClass entry = new NameAndAgeClass("lou",23);
nameAndAgeList.add(entry);
}
//create your adapter, use the nameAndAgeList ArrayList
CustomListViewAdapterNameAndAge nameAndAgeAdapter = new
CustomListViewAdapterNameAndAge(this, nameAndAgeList);
//get your listView and use your adapter
nameAndAgeListView.setAdapter(nameAndAgeAdapter);
nameAndAgeListView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int
i, long l) {
/*
Do what ever you want inside this onItemClick function
*/
}
});
}
public void addit(String nn){
ihg++;
nameAndAgeList.add(( new NameAndAgeClass("phill",ihg)));
}
}
public class NameAndAgeClass {
static public ArrayList<String> namee = new ArrayList<String>();
static public ArrayList<Integer> agee = new ArrayList<Integer>();
String name;
int age;
public NameAndAgeClass(String name, int age) {
this.name = name;
this.age = age;
namee.add(name);
agee.add(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
希望这会对某人有所帮助,即使我确定这可能不是正确的方法,或者有更好的方法。但这是需要修补的东西,也许它会让一些人不再头疼我必须让一个 2 列动态列表视图工作。感谢@Razgriz 对我的帮助!
public class MainActivity extends Activity {
M gg = new M();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aa);
}
public void ss(View v){
Intent intent2 = new Intent(MainActivity.this,M.class);
startActivity(intent2);
}
public void sa(View v){
gg.addit("phil");
}
}
public class M extends Activity {
static ArrayList<NameAndAgeClass> nameAndAgeList = new
ArrayList<NameAndAgeClass>();
static int ihg = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView nameAndAgeListView = (ListView) findViewById(R.id.listView);
//create your listView with your custom object
//create your adapter, use the nameAndAgeList ArrayList
CustomListViewAdapterNameAndAge nameAndAgeAdapter = new
CustomListViewAdapterNameAndAge(this, nameAndAgeList);
//get your listView and use your adapter
nameAndAgeListView.setAdapter(nameAndAgeAdapter);
nameAndAgeListView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int
i, long l) {
/*
Do what ever you want inside this onItemClick function
*/
}
});
}
public void addit(String nn){
ihg++;
NameAndAgeClass entry = new NameAndAgeClass(nn,ihg);
nameAndAgeList.add(entry);
}
}
public class NameAndAgeClass {
String name;
int age;
public NameAndAgeClass(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
以下是我的做法。
在主 activity 布局文件中,我在布局中放置了 2 个 ID 为 nameEditText
和 ageEditText
的 EditText 字段,位于 listView
下方作为保存按钮。在您的按钮中,不要忘记添加行:
android:click="onSave"
并在您的 Main Activity 中创建一个这样的函数:
public void onSave(View view){
//this is the function that will activate when you click your button
}
不用说,您应该这样连接您的 EditText:
public class MainActivity extends Activity {
//DO NOT DECLARE THIS AS STATIC, OTHERWISE YOU WON'T BE ABLE TO ADD TO IT
ArrayList<NameAndAgeClass> nameAndAgeList = new ArrayList<NameAndAgeClass>();
EditText nameInput;
EditText ageInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aa);
//hook up your EditText as such:
nameInput = (EditText) findViewById(R.id.nameEditText);
ageInput = (EditText) findViewById(R.id.ageEditText);
//more of your code here...
}
//more of your code here, and the onSave function
}
我们想要做的是,当您单击此 "Save" 按钮时,我们将从我们在 onCreate
函数中初始化的 editText 获取输入并将其添加到我们的 ArrayList。下面是我们将如何做到这一点。
public void onSave(View view){
//we get the string values from the EditText input
Sting nameInputFromField = nameInput.getText().toString();
Sting ageInputFromField = ageInput.getText().toString();
//we create a class using our values
NameAndAgeClass entry = new NameAndAgeClass(nameInputFromField, ageInputFromField);
//then we add it to our ArrayList
nameAndAgeList.add(entry);
//after that, we get the customListViewAdapter (I trust that you have this one)
//and call a neat function
//the function is called something like that
nameAndAgeAdapter.notifyDataSetChanged();
}
notifyDataSetChanged
的作用是 "refreshes" 您的 listView。通常这是在 ListViews 数据中进行修改后完成的,以便用户可以立即看到更改。
我正在尝试创建一个动态的自定义 ListView,用户可以在其中输入姓名和年龄,次数未知。感谢@Razgriz,他帮助我让自定义 ListView 正常工作。我现在正试图让它充满活力。我的问题是当我通过构造函数实例化 NameAndAgeClass 对象时,我的数组列表将显示我通过 onclick 输入的内容,但它也多次显示原始实例化,在 NameAndAgeClass class 中我试图为姓名和年龄创建 2 个数组列表,但出现内存不足错误。在 M class 的 for 循环中添加一个条目到 ArrayList nameAndAgeList 我如何获得我现在正在使用的 NameAndAgeClass 对象的大小,而我 < 10.
public class MainActivity extends Activity {
M gg = new M();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aa);
}
public void ss(View v){
Intent intent2 = new Intent(MainActivity.this,M.class);
startActivity(intent2);
}
public void sa(View v){
gg.addit("phil");
}
}
public class M extends Activity {
static ArrayList<NameAndAgeClass> nameAndAgeList = new
ArrayList<NameAndAgeClass>();
static NameAndAgeClass nandc = new NameAndAgeClass("bill", 88);
static int ihg = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView nameAndAgeListView = (ListView) findViewById(R.id.listView);
//create your listView with your custom object
/*
get no error with this just says not loading do i want to cancel
for(int i = 1 ; i < nameAndAgeList.size() ; i ++){
NameAndAgeClass entry = new NameAndAgeClass("lou",23);
nameAndAgeList.add(entry);
}
*/
for(int i = 1 ; i < 10 ; i ++){
NameAndAgeClass entry = new NameAndAgeClass("lou",23);
nameAndAgeList.add(entry);
}
//create your adapter, use the nameAndAgeList ArrayList
CustomListViewAdapterNameAndAge nameAndAgeAdapter = new
CustomListViewAdapterNameAndAge(this, nameAndAgeList);
//get your listView and use your adapter
nameAndAgeListView.setAdapter(nameAndAgeAdapter);
nameAndAgeListView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int
i, long l) {
/*
Do what ever you want inside this onItemClick function
*/
}
});
}
public void addit(String nn){
ihg++;
nameAndAgeList.add(( new NameAndAgeClass("phill",ihg)));
}
}
public class NameAndAgeClass {
static public ArrayList<String> namee = new ArrayList<String>();
static public ArrayList<Integer> agee = new ArrayList<Integer>();
String name;
int age;
public NameAndAgeClass(String name, int age) {
this.name = name;
this.age = age;
namee.add(name);
agee.add(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
希望这会对某人有所帮助,即使我确定这可能不是正确的方法,或者有更好的方法。但这是需要修补的东西,也许它会让一些人不再头疼我必须让一个 2 列动态列表视图工作。感谢@Razgriz 对我的帮助!
public class MainActivity extends Activity {
M gg = new M();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aa);
}
public void ss(View v){
Intent intent2 = new Intent(MainActivity.this,M.class);
startActivity(intent2);
}
public void sa(View v){
gg.addit("phil");
}
}
public class M extends Activity {
static ArrayList<NameAndAgeClass> nameAndAgeList = new
ArrayList<NameAndAgeClass>();
static int ihg = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView nameAndAgeListView = (ListView) findViewById(R.id.listView);
//create your listView with your custom object
//create your adapter, use the nameAndAgeList ArrayList
CustomListViewAdapterNameAndAge nameAndAgeAdapter = new
CustomListViewAdapterNameAndAge(this, nameAndAgeList);
//get your listView and use your adapter
nameAndAgeListView.setAdapter(nameAndAgeAdapter);
nameAndAgeListView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int
i, long l) {
/*
Do what ever you want inside this onItemClick function
*/
}
});
}
public void addit(String nn){
ihg++;
NameAndAgeClass entry = new NameAndAgeClass(nn,ihg);
nameAndAgeList.add(entry);
}
}
public class NameAndAgeClass {
String name;
int age;
public NameAndAgeClass(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
以下是我的做法。
在主 activity 布局文件中,我在布局中放置了 2 个 ID 为 nameEditText
和 ageEditText
的 EditText 字段,位于 listView
下方作为保存按钮。在您的按钮中,不要忘记添加行:
android:click="onSave"
并在您的 Main Activity 中创建一个这样的函数:
public void onSave(View view){
//this is the function that will activate when you click your button
}
不用说,您应该这样连接您的 EditText:
public class MainActivity extends Activity {
//DO NOT DECLARE THIS AS STATIC, OTHERWISE YOU WON'T BE ABLE TO ADD TO IT
ArrayList<NameAndAgeClass> nameAndAgeList = new ArrayList<NameAndAgeClass>();
EditText nameInput;
EditText ageInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aa);
//hook up your EditText as such:
nameInput = (EditText) findViewById(R.id.nameEditText);
ageInput = (EditText) findViewById(R.id.ageEditText);
//more of your code here...
}
//more of your code here, and the onSave function
}
我们想要做的是,当您单击此 "Save" 按钮时,我们将从我们在 onCreate
函数中初始化的 editText 获取输入并将其添加到我们的 ArrayList。下面是我们将如何做到这一点。
public void onSave(View view){
//we get the string values from the EditText input
Sting nameInputFromField = nameInput.getText().toString();
Sting ageInputFromField = ageInput.getText().toString();
//we create a class using our values
NameAndAgeClass entry = new NameAndAgeClass(nameInputFromField, ageInputFromField);
//then we add it to our ArrayList
nameAndAgeList.add(entry);
//after that, we get the customListViewAdapter (I trust that you have this one)
//and call a neat function
//the function is called something like that
nameAndAgeAdapter.notifyDataSetChanged();
}
notifyDataSetChanged
的作用是 "refreshes" 您的 listView。通常这是在 ListViews 数据中进行修改后完成的,以便用户可以立即看到更改。