Java Android ListView:如何使用按钮单击添加行

Java Android ListView:如何使用按钮单击添加行,java,android,android-listview,add,buttonclick,Java,Android,Android Listview,Add,Buttonclick,我有一个列表视图。在它里面,每一行都有一条0:00的文字。但是现在,我在我的操作栏上添加了一个按钮,但是我被卡住了。我不知道如何让按钮创建一个新行,显示0:00 public class RowData { String title; public RowData(String title) { this.title = title; } } 这是一行数据的代码 public void onCreate(Bundle savedInstanc

我有一个列表视图。在它里面,每一行都有一条0:00的文字。但是现在,我在我的操作栏上添加了一个按钮,但是我被卡住了。我不知道如何让按钮创建一个新行,显示0:00

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
这是一行数据的代码

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    RowData rowdata_data[] = new RowData[]
            {                   
             new RowData("0:00")            
            };

    RowdataAdapter adapter = new RowdataAdapter(this, 
            R.layout.listview_item_row, rowdata_data);
    listView1.setAdapter(adapter);

    listView1 = (ListView)findViewById(R.id.listView1);
}
public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
这是我的RowData类:

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
那么,我应该如何实现一个按钮单击来添加另一行呢? AdditionButton下:应为方法

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
public boolean onOptionsItemSelected(MenuItem item) 
{

    // Handle presses on the action bar items
    switch (item.getItemId()) 
    {
        case R.id.additionbutton:                      

            return true;           
        default:
            return super.onOptionsItemSelected(item);
    }
}

您需要创建一个可以更改的数据集,以便使数组成为类范围的变量,以便在需要时添加到其中

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
当您添加新行时,您需要通知适配器某些内容已更改,以便执行此操作

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
adapter.notifyDatasetChanged();
这将更新您的列表

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
我不知道如何让按钮创建新行

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
对于您当前的解决方案,这是不可能的(以高效的方式),因为您使用的是对象的静态数组-这意味着数组具有固定的大小(这意味着您假设该大小在运行时不会更改)

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
但你的目标“略有”不同。您希望在每次单击按钮后将对象数增加一个。这意味着您不知道可以有多少行(或者可以在运行时更改)

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
由于上述原因,您应该(必须)使用大小可变的动态数组。由于这个原因,您需要使用作为动态数组表示的数据源

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
基本算法:
  • 创建零行的新列表(或者默认情况下,一次只能有一行) 开始)

  • public class RowData {
    String title;
    
    public RowData(String title) {                     
        this.title = title;
    }
    }
    
  • 然后在适配器中创建将向其添加新项的公共方法 收集并发送适配器刷新请求(在将新行添加到集合中后)

  • public class RowData {
    String title;
    
    public RowData(String title) {                     
        this.title = title;
    }
    }
    
  • OnClickListener分配给按钮,并在
    onClick()
    方法中使用创建的方法将新行添加到ListView中

  • public class RowData {
    String title;
    
    public RowData(String title) {                     
        this.title = title;
    }
    }
    
解决方案: 如何初始化ListAdapter:

public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}
// Activity-level variable scope
private List<RowData> items = new ArrayList<RowData>();
private RowdataAdapter adapter;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    listView1 = (ListView)findViewById(R.id.listView1);

    // adding first item to List, it's optional step
    items.add(new RowData("0:00"));

    adapter = new RowdataAdapter(this, R.layout.listview_item_row, items);
    listView1.setAdapter(adapter);
}
public void addRow(RowData newRow) {
   // items represents List<RowData> in your Adapter class
   this.items.add(newRow);

   // sends request to update ListAdapter
   notifyDataSetChanged();
}
button.setOnClickListener(new View.OnClickListener() {

   @Override
   public void onClick(View v) {
      // add new row to Adapter
      adapter.addRow(new RowData("0:00"));
   }
});

希望我能帮你解决你的问题。

是的,谢谢,这正是我要找的!非常感谢你不仅发了一些文字,而且我真的非常感谢你给我的解释,因为我知道它为什么会起作用!
public class RowData {
String title;

public RowData(String title) {                     
    this.title = title;
}
}