2016-08-23 4 views
1

У меня есть представление списка на моем основном мероприятии, которое получает его данные из базы данных.Пропустить ListView элемент, нажатый между действиями

Проблема, с которой я сталкиваюсь, передает текст следующему действию на основе того, что пользователь выбрал в списке.

Я получаю просмотр списка, чтобы открыть следующую операцию и отправить какую-то странную строку в следующую операцию, но это не правильная информация, отправляемая. Вот мой код:

ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ КОД:

package com.example.chris.gymtracker; 

import android.content.Intent; 
import android.database.Cursor; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 


public class Days extends AppCompatActivity { 
    dbAddDays dbAddDays; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_days); 
     dbAddDays = new dbAddDays(this); 
     final ListView daysListView = (ListView) findViewById(R.id.daysListView); 
     String[] fromFieldNames = new String[]{dbAddDays.ADDDAYS_KEY_DAYS}; 

     Button addDaysButton = (Button) findViewById(R.id.addDaysButton); 
     Button refreshButton = (Button)findViewById(R.id.refreshButton); 

     addDaysButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       Intent startAddDaysActivity = new Intent(Days.this, addDays.class); 
       startActivity(startAddDaysActivity); 
      } 
     }); 
     refreshButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       populateDaysListView(); 
      } 
     }); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, android.R.id.text1, fromFieldNames); 
     daysListView.setAdapter(adapter); 
     daysListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id){ 
       Intent myIntent = new Intent(view.getContext(),selectWorkout.class); 
       String s = daysListView.getItemAtPosition(position).toString(); 
       myIntent.putExtra("itemSelected",s); 

       startActivityForResult(myIntent,position); 
      } 
     }); 
    } 
    public void populateDaysListView() { 
     Cursor cursor = dbAddDays.getDaysData(); 
     String[] fromFieldNames = new String[]{dbAddDays.ADDDAYS_KEY_DAYS}; 
     int[] toViewIDs = new int[]{R.id.addDaysDaysTextView}; 
     SimpleCursorAdapter myCursorAdapter; 
     myCursorAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.activity_add_day_text_view, cursor, fromFieldNames, toViewIDs, 0); 
     ListView myList = (ListView) findViewById(R.id.daysListView); 
     myList.setAdapter(myCursorAdapter); 
    } 
} 

ВТОРОЙ АКТИВНОСТЬ КОД:

package com.example.chris.tracker; 

import android.content.Intent; 
import android.database.Cursor; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.GridView; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 

public class selectWork extends AppCompatActivity { 
    dbAddDays dbAddDays; 
    Days Days; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_select_work); 
     Intent intentExtras = getIntent(); 
     //Bundle bun = intentExtras.getExtras(); 
     String s = intentExtras.getStringExtra("itemSelected"); 
     TextView textView = (TextView)findViewById(R.id.textView3); 
     textView.setText(s); 
     dbAddDays = new dbAddDays(this); 
     populateWorkoutGridView(); 
    } 
    public void populateWorkGridView() { 
     Cursor cursor = dbAddDays.getWorkoutData(); 
     String[] fromFieldNames = new String[]{dbAddDays.ADDDAYS_KEY_WORKOUT}; 
     int[] toViewIDs = new int[]{R.id.workoutWorkoutTextView}; 
     SimpleCursorAdapter myCursorAdapter; 
     myCursorAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.activity_workout_text_view, cursor, fromFieldNames, toViewIDs, 0); 
     GridView myGrid = (GridView) findViewById(R.id.workoutGridView); 
     myGrid.setAdapter(myCursorAdapter); 
    } 
} 

ПРОБЛЕМА:

Everything here works fine

But that bold Android. ... text view should show the text of the item clicked.

+0

У вас есть два разных адаптера в одном списке. Я бы посоветовал вам придерживаться CursorAdapter –

ответ

0

Поскольку вы используете CursorAdapter, вызов getItemAtPosition возвращает объект курсора, как показано с помощью вызова ToString() для этого объекта.

Попробуйте выполнить приведенный ниже код. Он пытается получить объект курсора, а затем захватить данные по имени столбца из массива fromFieldNames.

Cursor cursor = (Cursor)daysListView.getItemAtPosition(position); 
cursor.getString(cursor.getColumnIndex(fromFieldNames[column])) 
-1

Попробуйте использовать это:

Intent myIntent = new Intent(view.getContext(),selectWorkout.class); 
myIntent.putExtra("itemSelected", fromFieldNames[position]); 
startActivityForResult(myIntent,position); 
+0

@ChrisS Мой ответ вам поможет? – SANAT

+0

@ChrisS Примите мой ответ, если он вам поможет. – SANAT

+0

это не сработает и, вероятно, вызовет исключение из пределов границ. fromFieldNames - это статический массив, содержащий один элемент, если пользователь выбирает что-либо, кроме первой строки данных в списке, это не удастся. –

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