2015-04-10 4 views
-1

Я хочу вставить данные из EditText в ListView в базу данных SQLite. Детали имеют кнопки, так что я уже пытался фиксирован (как: there) сВставить ListView с setOnItemClickListener в базу данных

android:focusable="false" 

но setOnItemClickListener не работает.

Я также думал использовать функцию onTextChanged из ActivityListAdapter, но я не знаю, как получить доступ к объекту DatabaseHelper в моей MainActivity.

Функция setupActivityListViewAdapter в MainActivity:

private void setupActivityListViewAdapter() { 
    activitiesListAdapter = new ActivitiesListAdapter(MainActivity.this, R.layout.item_activities, db.getAllActivityByDay_ID(selected_day.getDay_ID())); 
    final ListView ActivitiesListView = (ListView)findViewById(R.id.listView_activities); 
    ActivitiesListView.setAdapter(activitiesListAdapter); 

    ActivitiesListView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

      Toast.makeText(MainActivity.this, 
        "Item in position " + position + " clicked", Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

И setOnItemClickListener не работают? Мой item_activities.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:inputType="numberDecimal" 
     android:id="@+id/activity_hours" 
     android:gravity="center_vertical" 
     android:hint="@string/activity_hours_hint" 
     android:layout_weight="0.10" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:text="@string/hours_h" 
     android:id="@+id/activity_hours_h" 
     android:gravity="center_vertical" 
     android:textStyle="normal" /> 

    <EditText 
     android:layout_width="5sp" 
     android:layout_height="fill_parent" 
     android:id="@+id/activity_activity" 
     android:inputType="text" 
     android:layout_weight="2" 
     android:layout_gravity="center" 
     android:hint="@string/activity_activity_hint" /> 

    <ImageButton 
     android:layout_width="0sp" 
     android:layout_height="fill_parent" 
     android:id="@+id/activity_delete" 
     android:onClick="removeActivityOnClickHandler" 
     android:contentDescription="@string/activity_delete" 
     android:src="@android:drawable/ic_menu_delete" 
     android:layout_weight="0.3" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     /> 

</LinearLayout> 

И я эту функцию в моей ActivitiesListAdapter:

private void setHoursTextListeners(final ActivitiesHolder holder) { 
    holder.hours.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      try{ 
       holder.activities.setHours(Integer.valueOf(s.toString())); 
      }catch (NumberFormatException e) { 
       Log.e(LOG_TAG, "error reading activity hour: " + s.toString()); 
      } 
     } 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 
     @Override 
     public void afterTextChanged(Editable s) { } 
    }); 
} 

Так как я могу манипулировать объект DataBaseHelper из другого класса, класса ActivitiesListAdapter? И лучше дать объекты единым для DataBaseHelper, а не как ArrayList (я думаю?), Так как мы решаем проблему.

Спасибо и с уважением.

+0

Использование 'android: focusable =" false "'., 'Android: focusableInTouchMode =" false "и' android: descendantFocusability = "blocksDescendants" 'для пользовательских элементов управления пользовательского интерфейса. – Piyush

+0

Я не знаю, что я делаю неправильно. но когда я вставляю эти все атрибуты в EditTexts, тогда я не могу вводить новый текст в EditTexts- – user4742258

ответ

0

Вы не можете писать текст в свои товары EditText и делать setOnItemClickListener одновременно. Поэтому вы должны позвонить setOnClickListener для вашей кнопки внутри адаптера и сделать все ваши действия с setOnItemClickListener.

+0

. О, хорошо, спасибо. Но кнопка - кнопка удаления. Поэтому я хочу обновить таблицу с помощью изменения текста. – user4742258

+0

О, забыл вопрос о дБ. Вы должны создать свой собственный класс, расширяющий стандарт [SQLiteOpenHelper] (http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html) с помощью конструктора 'myDB (Context)' и вызов 'new MyDB (контекст) .getWritableDatabase() 'для записи. – Ircover

+0

Извините. Я должен был бы сказать, что у меня есть. У меня уже есть класс DBHelper, расширяющий стандартный SQLiteOpenHelper. Я уже работаю в MainActivity с классом, и у меня есть объект db. Мой вопрос: как получить доступ к объекту db. Или я должен создать новый экземпляр объекта, так что у меня будет новое соединение с базой данных? – user4742258

Смежные вопросы