2017-01-05 2 views
1

Добрый день, всем!android - Отображение элемента, нажатого на Listview, заполненного SQLite

Я новичок в программировании на Android, борясь с тем, как подключить _id базы данных к адаптеру listview. Его почти потребляют в целом, пытаясь понять, как это сделать.


Вот код списка:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    overridePendingTransition(R.anim.fadein, R.anim.fadeout); 
    setContentView(R.layout.activity_dictionarylist); 

    filterText = (EditText)findViewById(R.id.txtsearch); 
    ListView itemList = (ListView)findViewById(R.id.listView); 
    DBHelper dbHelper = new DBHelper(Dictionarylist.this); 
    String[] terms = dbHelper.dictionaryWords(); 


    listAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1,terms); 
    itemList.setAdapter(listAdapter); 
    itemList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(getApplicationContext(), "Position " + position, Toast.LENGTH_LONG).show(); 
      Intent intent = new Intent(Dictionarylist.this, DictionaryActvity.class); 

      intent.putExtra("DICTIONARY_ID", position); 

      startActivity(intent); 
     } 
    }); 

    filterText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      Dictionarylist.this.listAdapter.getFilter().filter(s); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
    } 

Вот код для Helper базы данных:

public class DBHelper extends DBCon { 
public DBHelper(Context context){ 
    super(context); 
} 

public String[] dictionaryWords(){ 
    String query = "Select * from main_dictionary"; 
    Cursor cursor = this.getdbconnection().rawQuery(query, null); 
    ArrayList<String> wordterms = new ArrayList<String>(); 
    if(cursor.moveToFirst()){ 
     do{ 
      String word = cursor.getString(cursor.getColumnIndexOrThrow("main_word")); 
      wordterms.add(word); 
     } 
     while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    String[] dictionaryWords = new String[wordterms.size()]; 
    dictionaryWords = wordterms.toArray(dictionaryWords); 
    return dictionaryWords; 
} 

public Quizzer getQuizById(int quizId){ 
    Quizzer quizzer = null; 
    String query = "select * from main_dictionary where _id =" + quizId; 
    Cursor cursor = this.getdbconnection().rawQuery(query, null); 
    if(cursor.moveToFirst()){ 
     do{ 
      String word = cursor.getString(cursor.getColumnIndexOrThrow("main_word")); 
      String tagdef = cursor.getString(cursor.getColumnIndexOrThrow("tag_definition")); 
      String engdef = cursor.getString(cursor.getColumnIndexOrThrow("eng_defintion")); 
      String sample = cursor.getString(cursor.getColumnIndexOrThrow("example")); 
      quizzer = new Quizzer(word, tagdef, engdef, sample); 
     } 
     while(cursor.moveToNext()); 

    } 
    cursor.close(); 
    return quizzer; 
} 

Я был бы признателен за любую помощь.

+0

Где можно получить 'attach _id' от db? –

+0

Nope. Я хотел бы добавить _id базы данных в список, поэтому, когда мы нажимаем элемент в списке, он должен отображать информацию из _id базы данных. –

+0

Это приложение, к слову, словарь. –

ответ

0

AFAIK внутри RecyclerView's onBindViewHolder(ViewHolder holder, int position), вы можете прикрепить holder.setTag(model.getId) вместо держателя.setTag (position), который мы делаем. Возьмите OnClickListener наружу на holder.setOnClickListener(exampleListener) и получите этот тег внутри View.OnclickListener с помощью int positionId = (int) holder.getTag(). Таким образом, вы также можете использовать RecyclerView.

+0

Должен ли я использовать recyclerview вместо listview? –

+0

Возможно, вам захочется, если вам нужно. RecyclerView предоставляет гораздо больше возможностей для настройки. – Debdeep

+0

Вы также можете написать пользовательский адаптер для ListView и сделать то же самое, для этого обратитесь: [ссылка] (http://www.ezzylearning.com/tutorial/customizing-android-listview-items-with-custom-arrayadapter) Также в учебнике RecyclerView вы найдете следующее: [link] (https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html) – Debdeep