【问题标题】:Once a view is inflated dynamically as a list with a button attached to each row. How do I pass a row id to each of these buttons?一旦视图作为列表动态膨胀,每行都附加一个按钮。如何将行 ID 传递给每个按钮?
【发布时间】:2011-03-13 20:57:11
【问题描述】:

我有一个列表,这个列表基本上是滚动视图中的 TableRows,我用布局充气器充气,即它取决于在运行时添加了多少行。现在我在每一行都附加了一个按钮。此按钮是删除按钮或编辑按钮。在编程之前,我在想我将只获取行 ID 并为该行 ID 调用我的删除函数。但是现在当我编程时,我发现我找不到获取行 id 的方法,因为按钮始终是同一个按钮,并且按钮将如何知道它与哪一行链接。我基本上是在做数据库编程,我接受了大量的用户输入并将其显示在滚动视图内的表格行中。但我不知道如何获得这些行。到目前为止,我没有使用任何数组列表或数组适配器。我是否需要使用它们来解决我的这个问题? 请帮忙。
我在这里输入我的代码

   if(dbExists)
    {
        myName = (TextView)findViewById(R.id.myName);
        db.open();
        Cursor c = db.getAllTitles();
        long NoOfRows = c.getCount(); //here I am gettin 30 as entered in database
        while(NoOfRows >= 1)
        {
             c.moveToFirst();

            //.........Inflate here name and number........
             LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             View inflated = inflater.inflate(R.layout.name, myTableLayout);

             TextView userName = (TextView)findViewById(R.id.myName);
             userName.setText(c.getString(1));//here I am settng the user entered name

             Button delButton = (Button)rowView.findViewById(R.id.Delete_Name);
             delButton.setTag(RowId--);
             delButton.setOnClickListener(this);

             c.moveToNext();
             NoOfRows--;
        }
         db.close();
    }
   @Override
public void onClick(View v) {
    Long rowId = (Long)v.getTag(); 
    if (rowId != null) 
    {
       Toast.makeText(this, "rows get Tag() " + rowId, Toast.LENGTH_LONG).show();
        //db.deleteTitle(rowId); 
    } 

}

【问题讨论】:

  • 一旦你得到这个工作,你可能应该考虑使用一个列表视图,它可以自动处理你的光标。

标签: android database


【解决方案1】:

您可以在视图上使用setTag/getTag 这样设置并获取该视图的特殊信息。

使用它,您可以调用 button.setTag(rowId),然后稍后在您的 onClick 方法中使用 getTag 检索它。

这是一个detailed answer 和一个代码示例。

【讨论】:

  • 哦,你真好。让我试一试,然后回复你。谢谢
  • @Mathew,我在这里看到的是我可以使用 deleteButton.setTag(rowId) 但 getTag 返回 Object,但我需要一个整数,这只是我的 rowId。如果这是非常基本的东西,请原谅。
  • 只使用强制转换:int rowid = (Integer) button.getTag();
  • 实际上我很抱歉我不得不使用 long 而不是整数,但我无法将 Object 类型转换为 long。当我使用整数代替 long 时,我得到 nulpointerException public void onClick(View v) { db.deleteTitle((Integer)delButton.getTag()); } //...删除特定的用户数据... public boolean deleteTitle(long rowId) { return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; }
  • 您确定您的所有删除按钮都已完成setTag(rowId) 操作吗?
猜你喜欢
  • 1970-01-01
  • 2012-05-04
  • 2022-01-06
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 2017-09-29
  • 1970-01-01
相关资源
最近更新 更多