【问题标题】:Android ListView: How to add a row with a buttonclickAndroid ListView:如何通过单击按钮添加一行
【发布时间】:2013-12-24 04:55:17
【问题描述】:

我有一个列表视图。在其中,每一行都有一个文本说 0:00。但是现在,我在操作栏上添加了一个按钮,但后来我卡住了。不知道怎么让按钮新建一行,显示0:00

这是我的连续数据代码。

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);
}

这是我的 RowData 类:

public class RowData {
String title;

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

那么我应该如何实现一个按钮点击来添加另一行呢? addtionbutton: 下应该是方法。

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);
    }
}

【问题讨论】:

    标签: java android android-listview add buttonclick


    【解决方案1】:

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

    当您添加新行时,您需要通知适配器发生了更改,以便您执行此操作

    adapter.notifyDatasetChanged();
    

    这应该会更新您的列表

    【讨论】:

      【解决方案2】:

      我不知道如何让按钮创建一个新行

      使用您当前的解决方案这是不可能的(以有效的方式做到这一点),因为您使用的是静态对象数组 - 这意味着数组具有固定大小(这意味着您假设大小不会在运行时更改)。

      但您的目标“略有”不同。您希望在每次单击按钮后将对象数量增加一。这意味着您不确切知道您可以拥有多少行(或可以在运行时更改)。

      由于上述原因,您应该(必须)使用具有可变大小的动态数组。因此,您需要使用List 作为动态数组的表示形式的数据源。

      基本算法:

      • 用零创建新列表(或者您可以在默认情况下在 开始)。

      • 然后在您的适配器中创建公共方法,将新项目添加到 收集并发送应刷新适配器的请求(在您将新行添加到集合中之后)。

      • OnClickListener 分配给您的 Button,在 onClick() 方法中,您将使用 created 方法将新行添加到 ListView。

      解决办法:

      如何初始化 ListAdapter:

      // 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);
      }
      

      将新行添加到 ListAdapter 中的方法:

      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"));
         }
      });
      

      希望我能帮助您解决问题。

      【讨论】:

      • 是的,谢谢,这正是我要找的!非常感谢您不仅提供了一些文字,而且非常感谢您给我的解释,因为我知道它为什么有效!
      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2015-07-02
      相关资源
      最近更新 更多