SQLite
 sql >> डेटाबेस >  >> RDS >> SQLite

मैं संपादन टेक्स्ट में उपयोगकर्ता इनपुट के साथ अपने स्पिनर के क्षेत्र को कैसे अपडेट कर सकता हूं?

आपकी समस्या यह है कि आप स्पिनर की चयनित स्थिति (0,1,2 आदि) का उपयोग पंक्ति की आईडी के रूप में कर रहे हैं। पहली पंक्ति आईडी होगी 1, फिर 2, आदि (शायद लेकिन निश्चित रूप से नहीं यानी किसी कारण से एक पंक्ति को हटा दें और आपके पास अनुक्रम में एक अंतर है )।

जैसे कि आप वर्तमान में जो अनुभव कर रहे हैं वह पंक्ति आईडी और स्पिनर स्थिति के बीच 1 का अंतर है, इसलिए या तो कुछ भी नहीं या कोई अन्य पंक्ति अपडेट की जा रही है।

आपको या तो पंक्ति आईडी को स्पिनर स्थिति में काम करने की कुछ विधि नियोजित करने की आवश्यकता है (उदाहरण के लिए एक दूसरी सरणी जिसमें पहली सरणी के समान अनुक्रमणिका के लिए संबंधित आईडी है), या मैं क्या करूँगा, इसका लाभ उठाएं एक CursorAdpater . का लचीलापन , जैसे SimpleCursorAdapter और फिर spinner.getSelectedItemId() . का उपयोग करें के बजाय spinner.getSelectedItemPosition()

A CursorAdapter का उपयोग करने के लिए, आपको _id . नामक एक पंक्ति की आवश्यकता होगी (उदाहरण के लिए private static final String KEY_ID = "id"; करने के लिए public static final String KEY_ID = "_id"; )

टिप्पणी! जैसा कि मैंने ऊपर बताया है, मैं आपके private statics . को बदलने का भी सुझाव दूंगा public statics . के लिए )।

साथ ही एक CursorAdapter का उपयोग करने के लिए, आपको एक Cursor की आवश्यकता होगी। स्पिनरडेटाबेस.जावा में निम्नलिखित विधि पर्याप्त होगी।

public Cursor getAll() {
    db = this.getWritableDatabase();
    return db.query(TABLE_LABELS,null,null,null,null,null,null);
}

एडपेटर को सेटअप करने के लिए निम्नलिखित का उपयोग किया जा सकता है:-

    csr = dbhlpr.getAll();

    sca = new SimpleCursorAdapter(this,
            android.R.layout.simple_list_item_1,
            csr,
            new String[]{SpinnerDatabase.KEY_NAME},
            new int[]{android.R.id.text1},0);

    spinner.setAdapter(sca);

टिप्पणी! SpinnerDatabase.KEY_NAME . का उपयोग , यह एक उदाहरण है कि मैं private static . के विपरीत 'सार्वजनिक स्थैतिक' का सुझाव क्यों देता हूं .

SimpleCursorAdpater के लिए सूक्ष्म अंतर हैं;

  • तीसरा पैरामीटर कर्सर है,
  • चौथा प्रदर्शित करने के लिए कर्सर में कॉलम नामों की एक स्ट्रिंग सरणी है (पांचवें पैरामीटर से मेल खाना चाहिए),
  • पांचवां उन विचारों की आईडी है जिनमें डेटा रखा गया है ( simple_list_item_1 के लिए ऊपर बताए अनुसार android.R.id.text1 के साथ 1 कॉलम नाम का उपयोग करें)

और जब अपडेट की बात आती है तो spinner.getSelectedItemId() . का उपयोग करें पंक्ति आईडी के लिए।

कार्य उदाहरण (मान लें कि पंक्तियों में डेटा है)

SpinnerDatabase.java

public class SpinnerDatabase extends SQLiteOpenHelper {
    private SQLiteDatabase db;

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "spinnerDB";
    private static final String TABLE_LABELS = "labels";
    private static final String KEY_ID = "_id";
    public static final String KEY_NAME = "name";

    public SpinnerDatabase(Context context) {
        super(context,DATABASE_NAME,null,DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CATEGORIES_TABLES = "CREATE TABLE " +
                TABLE_LABELS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"+
                KEY_NAME + " TEXT)";
        db.execSQL(CREATE_CATEGORIES_TABLES);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS);
        onCreate(db);
    }

    public void insertLabel(String label){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME,label);

        db.insert(TABLE_LABELS,null,values);
    }


    //Defunct
    public List<String> getAllLabels(){
        List<String> labels = new ArrayList<String>();
        String selectQuery = "SELECT * FROM "+ TABLE_LABELS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery,null);
        if (cursor.moveToFirst()){
            do{
                labels.add(cursor.getString(1));
            }while (cursor.moveToNext());
        }

        cursor.close();
        return labels;
    }


    public void updateSpinner (long id, String label){
        ContentValues values;
        String where;

        db = this.getWritableDatabase();

        where = KEY_ID + " = " +id;

        values = new ContentValues();
        values.put(KEY_NAME,label);

        db.update(TABLE_LABELS,values,where,null);
        db.close();
    }

    public Cursor getAll() {
        db = this.getWritableDatabase();
        return db.query(TABLE_LABELS,null,null,null,null,null,null);
    }
}

गतिविधि SO46330096Activity.java

public class SO46330096Activity extends AppCompatActivity {

    SpinnerDatabase dbhlpr;
    Spinner spinner;
    Button editbutton;
    EditText spinneritem;
    SimpleCursorAdapter sca;
    Cursor csr;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_so46330096);
        spinner = (Spinner) findViewById(R.id.spinner);
        editbutton = (Button) findViewById(R.id.editbutton);
        spinneritem = (EditText) findViewById(R.id.spinnerinput);
        dbhlpr = new SpinnerDatabase(this);
        csr = dbhlpr.getAll();

        sca = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1,
                csr,
                new String[]{SpinnerDatabase.KEY_NAME},
                new int[]{android.R.id.text1},0);
        spinner.setAdapter(sca);

        editbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (spinneritem.getText().toString().length() > 0) {
                    dbhlpr.updateSpinner(spinner.getSelectedItemId(),spinneritem.getText().toString());
                    sca.swapCursor(csr = dbhlpr.getAll());
                }
            }
        });

    }
}

लेआउट activity_so46330096.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SO463300096 Activity"/>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:text="SPINNER ENTRY"
            />
        <EditText
            android:id="@+id/spinnerinput"
            android:layout_width="0dp"
            android:layout_weight="3"
            android:layout_height="match_parent" />
        <Button
            android:id="@+id/editbutton"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:text="EDIT"/>
    </LinearLayout>
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </Spinner>
</LinearLayout>

उदाहरण उपयोग:-

स्पिनर चयनित (नोट अपडेट डेटा पहले ही दर्ज किया जा चुका है ):-

पीनट बटर चयनित और अपडेट किया गया डेटा दर्ज किया गया :-

एडिट बटन पर क्लिक करने के बाद :-

संपादन टेक्स्ट को वर्तमान में चयनित स्पिनर आइटम पर सेट करना

एडिटटेक्स्ट को वर्तमान में चयनित स्पिनर आइटम के मान पर सेट करने के लिए निम्नलिखित का उपयोग किया जा सकता है:-

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            spinneritem.setText(csr.getString(csr.getColumnIndex(SpinnerDatabase.KEY_NAME)));
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

गतिविधि में एडेप्टर सेट करने के बाद जोड़ा जा सकता है।

उपरोक्त मेंSO46330096Activity.java यह लाइन का अनुसरण कर सकता है :-

        spinner.setAdapter(sca);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite हटाएं

  2. इंस्ट्र के साथ SQLite में एक स्ट्रिंग में एक चरित्र की स्थिति प्राप्त करें ()

  3. एंड्रॉइड स्टूडियो एमुलेटर पर SQLite डारबेस के साथ ऐप कैसे लॉन्च करें?

  4. SQLite औसत () कैसे काम करता है

  5. टीसीएल मोड में SQLite क्वेरी परिणामों को कैसे प्रारूपित करें