2016-08-23 2 views
1

Ich habe eine Listenansicht zu meiner Hauptaktivität, die ihre Daten aus einer Datenbank bezieht.Übergeben von ListView-Elementen, auf die zwischen Aktivitäten geklickt wurde

Das Problem, das ich habe, ist die Übergabe des Textes an die nächste Aktivität basierend auf dem, was der Benutzer in der Liste ausgewählt hat.

Ich bekomme die Listenansicht, um die nächste Aktivität zu öffnen und eine seltsame Zeichenfolge an die nächste Aktivität zu senden, aber es wird nicht die richtige Information gesendet. Hier ist mein Code:

zentral- Code:

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); 
    } 
} 

ZWEITER AKTIONSCode:

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); 
    } 
} 

DAS PROBLEM:

Everything here works fine

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

+0

Sie haben zwei verschiedene Adapter auf der gleichen Listenansicht. Ich würde vorschlagen, Sie bleiben mit dem CursorAdapter –

Antwort

0

Da Sie einen Adapter Cursor verwenden, der getItemAtPosition Aufruf kehrt das Cursor-Objekt als durch den Aufruf von toString() für das Objekt gesehen.

Versuchen Sie den folgenden Code. Es versucht, das Cursor-Objekt abzurufen und dann die Daten nach dem Spaltennamen aus dem fromFieldNames-Array abzurufen.

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

Versuchen Sie dies mit:

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

@ChrisS Meine Antwort hilft Ihnen? – SANAT

+0

@ChrisS Akzeptiere meine Antwort, wenn es dir hilft. – SANAT

+0

Dies wird nicht funktionieren und wahrscheinlich eine Ausnahme außerhalb des Bereichs verursachen. fromFieldNames ist ein statisches Array, das ein Element enthält. Wenn der Benutzer etwas anderes als die erste Datenzeile in der Liste auswählt, schlägt dies fehl. –

Verwandte Themen