2016-08-23 5 views
1

データベースからデータを取得する主なアクティビティのリストビューがあります。ListViewアイテムをアクティビティ間で渡す

問題は、ユーザーがリストで選択した内容に基づいて次のアクティビティにテキストを渡すことです。

私はリストビューを取得して次のアクティビティを開き、次のアクティビティに奇妙な文字列を送信しますが、正しい情報は送信されません。ここに私のコードは次のとおりです。

MAINアクティビティコード:

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

第2の活性CODE:

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

同じリストビューに2つの異なるアダプタがあります。私はあなたがCursorAdapterに固執することをお勧めします –

答えて

0

、getItemAtPositionコールは、カーソルオブジェクトを返してそのオブジェクトのtoString()を呼び出すことで見られるように。

以下のコードを試してください。カーソルオブジェクトを取得し、fromFieldNames配列から列名でデータを取得しようとします。

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

これを使用してみてください:あなたはCursorAdapterを使用しているので

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

@Chris私の答えはあなたを助けますか? – SANAT

+0

@ChrisSそれがあなたを助けるなら、私の答えを受け入れてください。 – SANAT

+0

これは機能しませんし、配列の範囲外の例外が発生する可能性があります。 fromFieldNamesは1つの要素を含む静的配列です。ユーザーがリスト内の最初の行以外のデータを選択した場合、これは失敗します。 –

関連する問題