繁体   English   中英

传递ListView项目在活动之间单击

[英]Passing ListView item clicked between activities

我有一个关于我的主要活动的列表视图,它从数据库中获取数据。

我遇到的问题是根据用户在列表中选择的内容将文本传递给下一个活动。

我正在获取列表视图以打开下一个活动并将一些奇怪的字符串发送到下一个活动,但它不是正确的信息发送。 这是我的代码:

主要活动代码:

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

问题:

这里的一切都很好

但那个大胆的Android。 ...文本视图应显示单击项目的文本。

由于您使用的是CursorAdapter,因此getItemAtPosition调用通过调用该对象上的toString()来返回游标对象。

请尝试下面的代码。 它尝试检索游标对象,然后通过fromFieldNames数组中的列名获取数据。

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

试试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM