java - 传递在 Activity 之间单击的 ListView 项目

标签 java android listview android-intent

我的主要 Activity 有一个 ListView ,它从数据库获取数据。

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

我正在获取 ListView 以打开下一个 Activity 并向下一个 Activity 发送一些奇怪的字符串,但这不是发送的正确信息。这是我的代码:

主要 Activity 代码:

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

第二个 Activity 代码:

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.

最佳答案

由于您使用的是 CursorAdapter,因此 getItemAtPosition 调用将返回光标对象,如通过对该对象调用 toString() 所看到的那样。

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

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

关于java - 传递在 Activity 之间单击的 ListView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39101026/

相关文章:

java - BCrypt 在 App Engine 应用程序中非常慢

java - 在哪里可以找到spring框架中HttpHeaders类的方法

android - 如何在 ListView MultiDetailRightButtonItem Delphi 中启用或禁用按钮

ListView 中的 Android radio 组行为不正常

listview - 检查当前是否在 Delphi VCL TListView 中显示编辑

java - 如何将监听器附加到单选按钮

java - Hadoop 要求输入路径位于 localhost 9000

java - 无法上传 aws 设备场中的项目

java - createRfcommSocket 的反射问题

android - ListView 中 View 持有者模式与自定义 View 的区别