【问题标题】:Transfer data from one activity to another将数据从一项活动传输到另一项活动
【发布时间】:2016-02-20 14:22:40
【问题描述】:

我想将第一个活动中微调器组件的值转移到第二个活动中的 sqlite 查询。通过 Spinner 传递值。

第一个活动 - Filtro_Activity

package br.exemplosqlite;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;

public class Filtro_Activity extends Activity implements      AdapterView.OnItemSelectedListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_filtro_);

    //referencia a Spinner
    //Spinner coligada;

    //final TextView nome = (TextView)findViewById(R.id.txvNome);
    //final TextView sobrenome = (TextView)findViewById(R.id.txvSobrenome);
    //final Spinner pday = (Spinner)findViewById(R.id.spinner);
    final Spinner spcoligada = (Spinner)findViewById(R.id.coligada);
    final Spinner spfilial = (Spinner)findViewById(R.id.filial);
    final Spinner splestoque = (Spinner)findViewById(R.id.lestoque);
    final Spinner spgprodutos = (Spinner)findViewById(R.id.gprodutos);
    final Spinner spsubprodutos = (Spinner)findViewById(R.id.subproduto);
    final Spinner spclprodutos = (Spinner)findViewById(R.id.clprodutos);



    //spinner = (Spinner)findViewById(R.id.spinner);

    ArrayAdapter adaptercoligada=ArrayAdapter.createFromResource(this, R.array.coligada, android.R.layout.simple_spinner_item);
    spcoligada.setAdapter(adaptercoligada);

    ArrayAdapter adapterfilial=ArrayAdapter.createFromResource(this, R.array.filial, android.R.layout.simple_spinner_item);
    spfilial.setAdapter(adapterfilial);

    ArrayAdapter adapterlestoque=ArrayAdapter.createFromResource(this, R.array.lestoque, android.R.layout.simple_spinner_item);
    splestoque.setAdapter(adapterlestoque);

    ArrayAdapter adaptergprodutos=ArrayAdapter.createFromResource(this, R.array.gprodutos, android.R.layout.simple_spinner_item);
    spgprodutos.setAdapter(adaptergprodutos);

    ArrayAdapter adaptersubprodutos=ArrayAdapter.createFromResource(this, R.array.subproduto, android.R.layout.simple_spinner_item);
    spsubprodutos.setAdapter(adaptersubprodutos);

    ArrayAdapter adapterclprodutos=ArrayAdapter.createFromResource(this, R.array.clprodutos, android.R.layout.simple_spinner_item);
    spclprodutos.setAdapter(adapterclprodutos);

    Button ok = (Button)findViewById(R.id.btnok);


    ok.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //chamada para a nova Activity
            Intent intent = new Intent(Filtro_Activity.this, ListUsersActivity1.class);
            intent.putExtra("coligada", spcoligada.getSelectedItem().toString());
            intent.putExtra("filial", spfilial.getSelectedItem().toString());
            intent.putExtra("lestoque", splestoque.getSelectedItem().toString());
            intent.putExtra("gprodutos", spgprodutos.getSelectedItem().toString());
            intent.putExtra("subprodutos", spsubprodutos.getSelectedItem().toString());
            intent.putExtra("clprodutos", spclprodutos.getSelectedItem().toString());

            //intent.putExtra("nomePessoa", nome.getText().toString());
            //intent.putExtra("sobrenomePessoa", sobrenome.getText().toString());
            //intent.putExtra("day", pday.getSelectedItem().toString());

            startActivity(intent);
        }
    });
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

}

另一个活动是:

package br.exemplosqlite;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class BD extends Activity {





private SQLiteDatabase bd;

public BD(Context context) {
    BDCore auxBd = new BDCore(context);
    bd = auxBd.getWritableDatabase();
}



public List<Produtos> buscar2() {

    List<Produtos> list = new ArrayList<Produtos>();
    String[] colunas = new String[]{"_id","item", "coligada","filial"};
    //String whereclausula = "coligada = 'issue'";

    Cursor cursor = bd.rawQuery("select * from produtos2 ", null);
    //Cursor cursor = bd.query("produtos", colunas,null, null, null, null,null);
    if (cursor.getCount() > 0) {
        cursor.moveToFirst();
        do {

            Produtos p = new Produtos();
            p.setId(cursor.getLong(0));
            p.setItem(cursor.getString(1));
            p.setColigada(cursor.getString(2));
            p.setFilial(cursor.getString(3));
            list.add(p);

        } while (cursor.moveToNext());
    }

    return (list);
 }

如您所见,第二个活动有一个 db.query,我想用第一个活动的微调器值对其进行修改。这可能吗?最好的方法是什么?

【问题讨论】:

标签: android android-intent android-activity


【解决方案1】:

您想通过选择 coligada 的值在代码中使用 where 子句吗?

修改答案

在您的 Filtro_Activity

像这样编辑你的确定按钮

Button ok = (Button)findViewById(R.id.btnok);
ok.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //chamada para a nova Activity

        Intent intent = new Intent(Filtro_Activity.this, BD.class);
        Bundle extras = new Bundle();
        extras.putString("coligada", spcoligada.getSelectedItem().toString());
        intent.putExtras(extras);
        startActivity(intent);
    }
});

在你的 BD 类/活动里面 onCreate(Bundle savedInstanceState);在 setContentView 之后放这个

Bundle extras = getIntent().getExtras();
String coligada = extras.getString("coligada");
List<Produtos> list = buscar2(coligada);

coligada 字符串像这样传递给这个函数

public List<Produtos> buscar2(String coligada) {

List<Produtos> list = new ArrayList<Produtos>();
String[] colunas = new String[]{"_id","item", "coligada","filial"};
//String whereclausula = "coligada = 'issue'";

Cursor cursor = bd.rawQuery("select * from produtos2 where coligada = ? ", new String[] {coligada});
//Cursor cursor = bd.query("produtos", colunas,null, null, null, null,null);
if (cursor.getCount() > 0) {
    cursor.moveToFirst();
    do {

        Produtos p = new Produtos();
        p.setId(cursor.getLong(0));
        p.setItem(cursor.getString(1));
        p.setColigada(cursor.getString(2));
        p.setFilial(cursor.getString(3));
        list.add(p);

    } while (cursor.moveToNext());
}
cursor.close()
return (list);
}

以下更新的答案检查从这一行开始

像下面的代码一样更新您的 BD 类

public class BD {

    private SQLiteDatabase bd;
    private String coligada;

    public BD(Context context, String coligada) {
        BDCore auxBd = new BDCore(context);
        this.bd = auxBd.getWritableDatabase();
        this.coligada = coligada;
    }

    public static BD newInstance(Context context, String coligada){
        return new BD(context, coligada);
    }

public List<Produtos> buscar2() {

    List<Produtos> list = new ArrayList<Produtos>();
    String[] colunas = new String[]{"_id","item", "coligada","filial"};
//String whereclausula = "coligada = 'issue'";

    Cursor cursor = bd.rawQuery("select * from produtos2 where coligada = ? ", new String[] {coligada});
//Cursor cursor = bd.query("produtos", colunas,null, null, null, null,null);
    if (cursor.getCount() > 0) {
        cursor.moveToFirst();
        do {

            Produtos p = new Produtos();
            p.setId(cursor.getLong(0));
            p.setItem(cursor.getString(1));
            p.setColigada(cursor.getString(2));
            p.setFilial(cursor.getString(3));
            list.add(p);

        } while (cursor.moveToNext());
    }
    cursor.close()
    return (list);
}

}

在您的 Filtro_Activity

像这样编辑你的确定按钮

Button ok = (Button)findViewById(R.id.btnok);
ok.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //chamada para a nova Activity

        Intent intent = new Intent(Filtro_Activity.this, ListUsersActivity1.class);
        Bundle extras = new Bundle();
        extras.putString("coligada", spcoligada.getSelectedItem().toString());
        intent.putExtras(extras);
        startActivity(intent);
    }
});

ListUserActivity1.classonCreate 中,将此代码放在 setContentView() 之后;

Bundle extras = getIntent().getExtras();
String coligada = extras.getString("coligada");
List<Produtos> list = BD.newInstance(getApplicationContext(), coligada).buscar2();

希望现在对您有所帮助。

【讨论】:

  • 是的,比如" select * from produtos2 where coligada = 'this is the item selected from spinner"
  • 看看我编辑的答案希望答案对你有帮助。
  • 嘿莱斯特,我想我会工作的......但是,我的 BD.class 没有“Oncreate”。我将发布完整的 BD.class 代码朋友。
  • 你有多少活动?并将其全部列出。我认为 Filtro_ActivityBD 是您所说的活动?
  • 好的,我会列出所有的。一时的朋友。
【解决方案2】:

仅在您的 BD 类上,您必须从您从第一个 Activity 这样传递的意图中获取价值

主要是您将价值传递给其他活动而不是 BD,因此您无法在该活动中获得它

替换fitro_activity中的这一行

Intent intent=new Intent(this,BD.class);intent.putExtra("coligada","Your Spinner selected Value");startActivity(intent);

在你的 BD Class On Create 中写下这个

Intent i = getIntent(); String spn1 = i.getString("coligada");

无论您在 fitroActivity 的 putextra 中使用“coligada”键设置什么值,都可以在 sp1 字符串中获得它。您可以使用 Toast 或 Log 上的打印来检查它

【讨论】:

  • 是的,我认为这就是问题所在,因为我的类如插入、更新、视图在 BD.class 中。我真的不明白如何做到这一点
  • 朋友能解释一下吗?
【解决方案3】:

我假设您真的想在 DB 中的 Filtro_Activity 中使用微调器的值。看起来你快到了。

这一行:

//chamada para a nova Activity
Intent intent = new Intent(Filtro_Activity.this, ListUsersActivity1.class);

应该是:

//chamada para a nova Activity
Intent intent = new Intent(Filtro_Activity.this, DB.class);

使用您要将数据发送到的数据库活动。请注意,它可能不应该是一个活动,而是一个从 Filtro_Activity 实例化的简单类。

“活动是用户可以做的一个单一的、专注的事情。几乎所有活动都与用户交互......”到数据库的后台连接并不真正适合,活动通常具有我没有的 GUI见数据库。

这个答案确实偏离了原来的问题,所以如果你真的想发送微调器数据,你可以在第二个活动的 onCreate 方法中运行以下代码。

Intent intent = getIntent();
String coligada = intent.getStringExtra("coligada");

这些来自http://developer.android.com/training/basics/firstapp/starting-activity.html的android教程

顺便说一句,您可能应该使用style guides for Java

【讨论】:

  • 你能举个例子吗?我不了解“EXTRA_MESSAGE”。 ;)
  • 它的字符串额外标识符。您在 putExtra 中使用的内容。现在看看。清楚了吗?
【解决方案4】:

要将信息传输到另一个活动,请使用用于启动新活动的意图。下面是一个示例链接http://www.hackpundit.com/android-transfer-data-activity-intent/

【讨论】:

  • 问题是如果不先传递值,我就无法进入第二个活动
猜你喜欢
  • 2012-01-24
  • 2014-09-19
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2019-10-08
  • 2020-08-22
相关资源
最近更新 更多