如果我点击编辑按钮特定的行数据应该在列表视图中获取?

时间:2015-08-28 07:17:40

标签: android

我想从数据库中通过id获取记录? 如果我点击listview行中的编辑按钮,我想从数据库编辑整个记录。

1 个答案:

答案 0 :(得分:1)

没有代码,我无法帮助你,但我认为你没有方向或路线图。让我告诉你路线图,以便你知道如何实现你想做的事情:

  1. 在列表视图上实现click侦听器。点击应该根据​​您的需要,如简单点击或长按或你得到设置项目点击监听器。

  2. 在点击列表器中,您可以轻松获取索引并使用索引从模型类中获取项目ID(如果您有自定义适配器和数组)

  3. 现在您拥有了获得Id的索引,Id是数据库中从行获取数据的关键。所以你有id你可以获取数据并将数据显示到用户可以编辑这些值的活动中

    这只是演示代码,所以你可以得到这个想法,在我的情况下我在数据库中有这个功能而且我正在以下列方式获取/检索数组列表

    public ArrayList GetData(String Name){

      ArrayList<Detail> list = new ArrayList<Detail>();
        cursor = db.rawQuery("select * from MosqueDataNew where Name = '"
                + Name + "'", null);
        if (cursor != null && cursor.getCount() > 0) {
            cursor.moveToFirst();
            list.add(new Detail(
                    cursor.getString(cursor.getColumnIndex("ID")),
                    cursor.getString(cursor.getColumnIndex("Name")),
                    cursor.getString(cursor.getColumnIndex("LatitudeLocation")),
                    cursor.getString(cursor.getColumnIndex("LongitudeLocation")),
                    cursor.getString(cursor.getColumnIndex("Size"))));
            return list;
        }
        return null;
    }
    
  4. 所以这是了解如何从特定行检索数据的方法。

    1. 现在从用户获取版本后,您可以再次将值保存在相同的ID中,以便为此更新数据,您必须在数据库中实现更新方法。并调用该函数Update按钮单击监听器。
    2. public boolean UpdateData(ContentValues contentValues,String id){

      if (db.update("YourTableName", contentValues, "ID = '" + id + "'",      null) > 0) {
      return true;
      }
      return false;}
      

      内容值是您要在该位置保存的新更新值。

      第2部分 由于您希望通过单击每行的按钮来编辑新活动中的值,因此如果在创建适配器时将上下文传递给适配器,则可以实现此目的,因为要打开要用于编辑的新活动。值,你必须有上下文来开始一个新的活动,这就是你如何做到的:

      public class MyAdapter extends Adapter {
           private Context context;
      
           public MyAdapter(Context context) {
                this.context = context;     
           }
      
           public View getView(...){
               View v;
               v.setOnClickListener(new OnClickListener() {
                   void onClick() {
                       context.startActivity(...);
                   }
               });
           }
      }
      

      因此您可以在此处看到您正在使用启动要打开的活动,因此现在很清楚如何导航到新活动,但在此之前您需要从数据库中获取所有数据以进行编辑,这就是在打开新活动之前按钮点击的方式

      在适配器的getView方法中,您必须放置适用于每一行的单击侦听器,您需要获取项目列表的ID,然后将其传递给数据库函数,该函数获取特定Id的所有数据

      editButton.setOnClickListener(new View.OnClickListener() {
      
                  @Override
                  public void onClick(View arg0) {
                      //get id of itemlist , or array what ever datamodel you are using  and use it to fetch the data from the database
      
                  }
              });
      
        

      编辑第3部分

      如果你想在id的基础上得到数据,那么数据库的上层定义函数会稍微改变一下,这是怎么回事

      public ArrayList GetData(String id) {
      
        ArrayList<Detail> list = new ArrayList<Detail>();
          cursor = db.rawQuery("select * from MosqueDataNew where id = '"
                  + ID + "'", null);
          if (cursor != null && cursor.getCount() > 0) {
              cursor.moveToFirst();
              list.add(new Detail(
                      cursor.getString(cursor.getColumnIndex("ID")),
                      cursor.getString(cursor.getColumnIndex("Name")),
                      cursor.getString(cursor.getColumnIndex("LatitudeLocation")),
                      cursor.getString(cursor.getColumnIndex("LongitudeLocation")),
                      cursor.getString(cursor.getColumnIndex("Size"))));
              return list;
          }
          return null;
      }
      

      更新第5部分

      如果您需要获取更改查询所需的特定行,那么现在已经使方法从数据库中获取所有数据

      // get userlist
          public List<UserList> getuserlistRow(String id) {
              String selectQuery = "SELECT firstname , lastname"
                      + DATABASE_TABLE_NAME;
              SQLiteDatabase db = this.getReadableDatabase();
              Cursor cursor = db.rawQuery("SELECT * From YOUR_TABLE_NAME where id="'id'"", null);
              List<UserList> userlist = new ArrayList<UserList>();
              if (cursor.moveToFirst()) {
                  do {
                      UserList list = new UserList();
                      list.setId(Integer.parseInt(cursor.getString(0)));
                      list.setFirstname(cursor.getString(3));
                      list.setLastname(cursor.getString(4));
                      userlist.add(list);
      
                  } while (cursor.moveToNext());
              }
              return userlist;
      
          }
      
        

      现在点击按钮,你可以做这个ArrayList myList =   new ArrayList(getuserlistRow(id));
        Toast.makText(your_context,&#34;&#34 + myList.toString(),Toast.LENGTH_LONG).show():

      注意

        

      上面的行和共享代码可能有语法错误我刚刚给你的想法,你可以轻松地在互联网上搜索语法。

      因此,通过这种方式,您可以获得完整记录中的所有数据,此方法将数据返回到我的数据类型的数组列表中,即&#34;详细信息&#34;在我的情况下,您可以转换为您的数据类型。

      我希望这有助于您了解如何做到这一点。