3

의 버튼을 클릭합니다. sqlite 데이터베이스를 사용하여 크리켓 플레이어 이름을 추가하고 마지막으로 listview에 이름을 표시합니다.listview 항목 행에서 업데이트 및 삭제 작업을 수행하는 방법 CursorAdapter

CustomCursorAdapter.java :

import android.content.Context; 
import android.database.Cursor; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.CursorAdapter; 
import android.widget.TextView; 

public class CustomCursorAdapter extends CursorAdapter { 

    public CustomCursorAdapter(Context context, Cursor c) { 
     super(context, c); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     // when the view will be created for first time, 
     // we need to tell the adapters, how each item will look 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     View retView = inflater.inflate(R.layout.single_row_item, parent, false); 

     return retView; 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     // here we are setting our data 
     // that means, take the data from the cursor and put it in views 

     TextView textViewPersonName = (TextView) view.findViewById(R.id.tv_person_name); 
     textViewPersonName.setText(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(1)))); 

     //Handle buttons and add onClickListeners 
     Button deleteBtn = (Button)view.findViewById(R.id.delete_btn); 
     Button updateBtn = (Button)view.findViewById(R.id.update_btn); 

     deleteBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 

       notifyDataSetChanged(); 
      } 
     }); 

     updateBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       //do something 

       notifyDataSetChanged(); 
      } 
     });   
    } 
} 

single_row_item.xml :

나는 내가 그에 대한 어댑터 코드를 게시하고 업데이트를 추가 CustomCursorAdapter.java.Below에서 버튼을 삭제하고

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <Button 
     android:id="@+id/update_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_toLeftOf="@+id/delete_btn" 
     android:text="Update" /> 

    <Button 
     android:id="@+id/delete_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:text="Delete" /> 

    <TextView 
     android:id="@+id/tv_person_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/add_btn" 
     android:layout_alignBottom="@+id/add_btn" 
     android:layout_alignParentLeft="true" 
     android:paddingBottom="5dp" 
     android:text="Sample Data" 
     android:textSize="15sp" /> 

</RelativeLayout> 

sonDatabaseHelper.java :

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class PersonDatabaseHelper { 

    private static final String TAG = PersonDatabaseHelper.class.getSimpleName(); 

    // database configuration 
    // if you want the onUpgrade to run then change the database_version 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "mydatabase.db"; 

    // table configuration 
    private static final String TABLE_NAME = "person_table";   // Table name 
    private static final String PERSON_TABLE_COLUMN_ID = "_id";  // a column named "_id" is required for cursor 
    private static final String PERSON_TABLE_COLUMN_NAME = "person_name"; 
    private static final String PERSON_TABLE_COLUMN_PIN = "person_pin"; 

    private DatabaseOpenHelper openHelper; 
    private SQLiteDatabase database; 

    // this is a wrapper class. that means, from outside world, anyone will communicate with PersonDatabaseHelper, 
    // but under the hood actually DatabaseOpenHelper class will perform database CRUD operations 
    public PersonDatabaseHelper(Context aContext) { 

     openHelper = new DatabaseOpenHelper(aContext); 
     database = openHelper.getWritableDatabase(); 
    } 

    public void insertData (String aPersonName, String aPersonPin) { 

     // we are using ContentValues to avoid sql format errors 

     ContentValues contentValues = new ContentValues(); 

     contentValues.put(PERSON_TABLE_COLUMN_NAME, aPersonName); 
     contentValues.put(PERSON_TABLE_COLUMN_PIN, aPersonPin); 

     database.insert(TABLE_NAME, null, contentValues); 
    } 

    public Cursor getAllData() { 

     String buildSQL = "SELECT * FROM " + TABLE_NAME; 

     Log.d(TAG, "getAllData SQL: " + buildSQL); 

     return database.rawQuery(buildSQL, null); 
    } 

    // this DatabaseOpenHelper class will actually be used to perform database related operation 

    private class DatabaseOpenHelper extends SQLiteOpenHelper { 

     public DatabaseOpenHelper(Context aContext) { 
      super(aContext, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase sqLiteDatabase) { 
      // Create your tables here 

      String buildSQL = "CREATE TABLE " + TABLE_NAME + "(" + PERSON_TABLE_COLUMN_ID + " INTEGER PRIMARY KEY, " + 
        PERSON_TABLE_COLUMN_NAME + " TEXT, " + PERSON_TABLE_COLUMN_PIN + " TEXT)"; 

      Log.d(TAG, "onCreate SQL: " + buildSQL); 

      sqLiteDatabase.execSQL(buildSQL); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { 
      // Database schema upgrade code goes here 

      String buildSQL = "DROP TABLE IF EXISTS " + TABLE_NAME; 

      Log.d(TAG, "onUpgrade SQL: " + buildSQL); 

      sqLiteDatabase.execSQL(buildSQL);  // drop previous table 

      onCreate(sqLiteDatabase);    // create the table from the beginning 
     } 
    } 
} 

출력 :

스크린 샷 위의 점에서

enter image description here

,이 업데이트를 보여주고 button.If을 삭제 I는 경고를 표시해야하는 업데이트 버튼을 클릭 대화 상자를 열고 지정된 listview의 이름을 편집하여 표시하십시오.

그런 다음 삭제 버튼을 클릭하면 적절한 목록보기 행을 삭제해야합니다.

아무도 나를 도와 줄 수 없습니다. 감사합니다.

+0

커서 어댑터에서 목록 콘텐츠 목록을 재정의 할 수 없습니다. BaseAdapter를 사용해야하고 작업에서 listitemclick을 무시해야합니다. –

+0

BaseAdapter를 사용하고 BaseAdapter를 사용하면 일부 대화 상자가 열리면 –

+0

@AndroidDeveloper가 표시 될 수 있습니다. 커서 어댑터에서만 작동합니다. 모든 코드는 커서 어댑터에만 관련됩니다. 커서 어댑터와 관련된 가능성이 있습니다. – Steve

답변

4

마침내 나는 내 자신의 일을했다. 그러나 Cursor Adapter 대신 출력을 얻기 위해 Base Adapter을 사용하고있다.

나는이 Tutorial을 참조했다.이 튜토리얼을 찾는 데 더 많은 시간이 걸렸다. 그것은 나를 도왔다. 그런 다음 프론트 페이지와 나의 요구 사항을 약간 수정했다.

enter image description here

나는 this.Below 내가 그것에 대해 MainActivity의 변화를 보여주는하고처럼 내 앞 페이지를 변경 :

MainActivity.java :

public class MainActivity extends Activity implements OnClickListener { 

    private Button btn_add; 
    ActionBar actionBar; 

    private ListView listview; 

    DatabaseHelper db; 
    public ArrayList<ProductModel> _productlist = new ArrayList<ProductModel>(); 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     btn_add = (Button) findViewById(R.id.btn_add); 

     btn_add.setOnClickListener(this); 

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

     actionBar = getActionBar(); 
     ColorDrawable colorDrawable = new ColorDrawable(
       Color.parseColor("#000000")); 
     actionBar.setBackgroundDrawable(colorDrawable); 

    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 

     _productlist.clear(); 

     db = new DatabaseHelper(getApplicationContext()); 
     db.getWritableDatabase(); 
     ArrayList<ProductModel> product_list = db.getProudcts(); 

     for (int i = 0; i < product_list.size(); i++) { 

      String tidno = product_list.get(i).getIdno(); 

      System.out.println("tidno>>>>>" + tidno); 
      String tname = product_list.get(i).getProductname(); 
      String tprice = product_list.get(i).getProductprice(); 

      ProductModel _ProductModel = new ProductModel(); 

      _ProductModel.setIdno(tidno); 
      _ProductModel.setProductname(tname); 
      _ProductModel.setProductprice(tprice); 

      _productlist.add(_ProductModel); 
     } 

     listview.setAdapter(new ListAdapter(this)); 
     db.close(); 

    } 

    private class ListAdapter extends BaseAdapter { 
     LayoutInflater inflater; 
     ViewHolder viewHolder; 

     public ListAdapter(Context context) { 
      // TODO Auto-generated constructor stub 
      inflater = LayoutInflater.from(context); 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return _productlist.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      if (convertView == null) { 

       convertView = inflater.inflate(R.layout.listview_row, null); 
       viewHolder = new ViewHolder(); 

       viewHolder.txt_pname = (TextView) convertView 
         .findViewById(R.id.txtdisplaypname); 
       viewHolder.txt_pprice = (TextView) convertView 
         .findViewById(R.id.txtdisplaypprice); 

       viewHolder.txtidno = (TextView) convertView 
         .findViewById(R.id.txtdisplaypid); 
       convertView.setTag(viewHolder); 

      } else { 
       viewHolder = (ViewHolder) convertView.getTag(); 
      } 

      viewHolder.txt_pname.setText(_productlist.get(position) 
        .getProductname().trim()); 
      viewHolder.txt_pprice.setText(_productlist.get(position) 
        .getProductprice().trim()); 

      viewHolder.txtidno.setText(_productlist.get(position).getIdno() 
        .trim()); 

      final int temp = position; 
      (convertView.findViewById(R.id.btn_update)) 
        .setOnClickListener(new OnClickListener() { 

         public void onClick(View arg0) { 

          String _productid = String.valueOf(_productlist 
            .get(temp).getIdno()); 
          String _productname = _productlist.get(temp) 
            .getProductname(); 
          String _productprice = _productlist.get(temp) 
            .getProductprice(); 

          Intent intent = new Intent(MainActivity.this, 
            AddUpdateValues.class); 

          Bundle bundle = new Bundle(); 
          bundle.putString("id", _productid); 
          bundle.putString("name", _productname); 
          bundle.putString("price", _productprice); 
          intent.putExtras(bundle); 
          startActivity(intent); 

         } 
        }); 

      (convertView.findViewById(R.id.btn_delete)) 
        .setOnClickListener(new OnClickListener() { 

         public void onClick(View arg0) { 

          AlertDialog.Builder alertbox = new AlertDialog.Builder(
            MainActivity.this); 
          alertbox.setCancelable(true); 
          alertbox.setMessage("Are you sure you want to delete ?"); 
          alertbox.setPositiveButton("Yes", 
            new DialogInterface.OnClickListener() { 

             public void onClick(
               DialogInterface arg0, int arg1) { 

              Log.i(">>>TEMP>>>", temp + ""); 
              Log.i(">>>getIdno>>>>>>", 
                _productlist.get(temp) 
                  .getIdno().trim() 
                  + ""); 
              System.out 
                .println(">>>getIdno>>>>>>" 
                  + _productlist 
                    .get(temp) 
                    .getIdno() 
                    .trim()); 
              db.removeProduct(
                _productlist.get(temp) 
                  .getIdno().trim(), 
                "", ""); 

              MainActivity.this.onResume(); 

              Toast.makeText(
                getApplicationContext(), 
                "Project Deleted...", 
                Toast.LENGTH_SHORT).show(); 

             } 

            }); 
          alertbox.setNegativeButton("No", 
            new DialogInterface.OnClickListener() { 
             public void onClick(
               DialogInterface arg0, int arg1) { 

             } 
            }); 
          alertbox.show(); 
         } 
        }); 
      return convertView; 

     } 
    } 

    private class ViewHolder { 
     TextView txt_pname; 
     TextView txt_pprice; 
     TextView txtidno; 

    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch (v.getId()) { 
     case R.id.btn_add: 
      Intent addintent = new Intent(MainActivity.this, AddRecord.class); 
      startActivity(addintent); 
      break; 

     default: 
      break; 
     } 

    } 

} 

나는이 대답을 희망 월 누군가에게 도움이된다.

+0

그 링크는 brokern입니다. – FaisalAhmed

관련 문제