Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 动态自定义列表视图?_Android_Listview_Arraylist_Android Arrayadapter - Fatal编程技术网

Android 动态自定义列表视图?

Android 动态自定义列表视图?,android,listview,arraylist,android-arrayadapter,Android,Listview,Arraylist,Android Arrayadapter,我正在尝试创建一个动态自定义ListView,用户可以在其中输入姓名和年龄,次数未知。要归功于@Razgriz,他帮助我实现了自定义列表视图。我现在正努力使它充满活力。我的问题是,当我通过构造函数实例化NameAndAgeClass对象时,我的arraylist将显示我通过onclick输入的内容,但它也多次显示原始实例化,在NameAndAgeClass类中,我尝试为name和age创建2个arraylist,但我遇到了内存不足错误。在M类中的for循环中,向ArrayList nameAnd

我正在尝试创建一个动态自定义ListView,用户可以在其中输入姓名和年龄,次数未知。要归功于@Razgriz,他帮助我实现了自定义列表视图。我现在正努力使它充满活力。我的问题是,当我通过构造函数实例化NameAndAgeClass对象时,我的arraylist将显示我通过onclick输入的内容,但它也多次显示原始实例化,在NameAndAgeClass类中,我尝试为name和age创建2个arraylist,但我遇到了内存不足错误。在M类中的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;
}
}
公共类MainActivity扩展活动{
M gg=新的M();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.aa);
}
公共空间ss(视图五){
意向意向2=新意向(MainActivity.this,M.class);
星触觉(intent2);
}
公共空间sa(视图五){
gg.addit(“菲尔”);
} 
}
公共类M扩展活动{
静态ArrayList name和gelist=new
ArrayList();
静态名称和类别nandc=新名称和类别(“bill”,88);
静态int ihg=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView名称和GelistView=(ListView)findViewById(R.id.ListView);
//使用自定义对象创建listView
/*       
没有错误,只是说不加载我想取消吗
对于(int i=1;i
希望这能帮助一些人,尽管我确信这可能不是正确的方法,或者有更好的方法。但这是一个需要修补的东西,也许它会让人省去我让一个2列动态listview工作时的头疼。感谢@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;
}
}
公共类MainActivity扩展活动{
M gg=新的M();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.aa);
}
公共空间ss(视图五){
意向意向2=新意向(MainActivity.this,M.class);
星触觉(intent2);
}
公共空间sa(视图五){
gg.addit(“菲尔”);
} 
}
公共类M扩展活动{
静态ArrayList name和gelist=new
ArrayList();
静态int ihg=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView名称和GelistView=(ListView)findViewById(R.id.ListView);
//使用自定义对象创建listView
//创建适配器时,请使用nameAndAgeList ArrayList
CustomListViewAdapterNameAndAgeAdapter=新建
CustomListViewAdapterMeansdage(此、名称和传道者);
//获取listView并使用适配器
setAdapter(nameAndAgeAdapter);
nameAndAgeListView.setOnItemClickListener(新建
AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView,View,int
i、 长(l){
/*
在这个mclick函数中,你想做什么就做什么
*/
}
});
}
公共void addit(字符串nn){
ihg++;
NameAndAgeClass条目=新的NameAndAgeClass(nn,ihg);
姓名和传道者。添加(条目);
}   
}
公共类名称和类别{
字符串名;
智力年龄;
public name和ageclass(字符串名,int-age){
this.name=名称;
这个。年龄=年龄;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共整数getAge(){
回归年龄;
}
公共无效设置(整数){
这个。年龄=年龄;
}
}

以下是我的做法

在主活动布局文件中,我在布局中的
列表视图
下方放置了两个ID为
nameEditText
ageEditText
的EditText字段,以及一个保存按钮。在按钮中,不要忘记添加行:

android:click="onSave"
在您的主要活动中,创建如下功能:

public void onSave(View view){
    //this is the function that will activate when you click your button
}
不言而喻,你应该把你的编辑文本连接起来:

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

 }
notifyDataSetChanged的作用是“刷新”列表视图。通常这是在修改后完成的
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();
}