【问题标题】:How to get the index of a clicked item into another activity?如何将点击项目的索引获取到另一个活动中?
【发布时间】:2012-09-21 17:33:27
【问题描述】:

我有一个活动(Contato),它显示了我在数据库(banco > contatos > nome, telefone (database>table>rows)) 中的联系人的列表视图。当点击联系信息时,会出现一个对话框并向我显示信息和 3 按钮 (OK/Alterar/Delete) 当我点击 Alterar 时,它会将我发送到另一个活动(Alterarcontato),我有 2 个编辑文本和 1 个按钮。 因此,当我发送到 Alterarcontato 活动时,我仍然希望获得我点击的联系人的索引,以便我可以更改它的值(使用 db.update)。

Contato.java 代码 ListView 显示对话框并具有它的索引。

    ListView user = (ListView) findViewById(R.id.lvShowContatos);
    //String = simple value ||| String[] = multiple values/columns
    String[] campos = new String[] {"nome", "telefone"};

    list = new ArrayList<String>();
    c = db.query( "contatos", campos, null, null, null, null, null);
    c.moveToFirst();
    if(c.getCount() > 0) {
        while(true) {
           list.add(c.getString(c.getColumnIndex("nome")).toString());
            if(!c.moveToNext()) break;
        }
    }

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, list);

    user.setAdapter(adapter);

    user.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            reg = position;
            c.moveToPosition(reg);
            String nome = c.getString(c.getColumnIndex("nome"));
            String telefone = c.getString(c.getColumnIndex("telefone"));
            ShowMessage(nome, telefone);
        }
    });

具有editTexts 和按钮的Alterarcontato.java 代码,然后可以更改值。

              EditText nomeA = (EditText) findViewById(R.id.etNomeAlter);
            EditText telefoneA = (EditText) findViewById(R.id.etTelefoneAlter);

            final String nomeB = nomeA.getText().toString();
            final String telefoneB = telefoneA.getText().toString();

            String where = "id=?";
            String[] whereArgs = {"nome", "telefone"};

            ContentValues dataToInsert = new ContentValues();                          
            dataToInsert.put("nome", nomeB);
            dataToInsert.put("telefone", telefoneB);

            db.update("contatos", dataToInsert, where, whereArgs);

但如 Contato.java 代码所示,我没有联系人的任何 ID,所以 String where = "id=?"; 有点无效,所以我如何从 Contact.java 获取索引以显示在 Alterarcontato .java 所以当我写一些东西并点击按钮时,数据库中的值会改变吗?

谢谢。

【问题讨论】:

  • 您可以通过Intent传递联系人的索引,并在Alterarcontato活动中检索索引。
  • 我该怎么做?你能给我举个例子吗?

标签: android database listview


【解决方案1】:
    setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        reg = position;
        c.moveToPosition(reg);
        String nome = c.getString(c.getColumnIndex("nome"));
        String telefone = c.getString(c.getColumnIndex("telefone"));
        ShowMessage(nome, telefone);

        /// The above method will show the dialog with contact info right..? SO from the dialog you are launching the activity to edit the info. While starting the activity you have to pass the index. Like below :

           Intent intent = new Intent(getApplicationContext(), Alterarcontato.class);
           // the index is the variable which contains the index of the selected contact in your dialog.
       intent.putExtra("key", index);
           startActivity(intent);


    <-- Alterarcontato.java -->

public class Alterarcontato extends Activity {

    private Integer mIndex;


    @Override
    public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          mIndex = getIntent().getExtras().getInt("key");
    }
 }

【讨论】:

  • package 是什么意思?我必须把我的包裹放进去吗?例如:com.example.mensagem;?因为它给了我错误。 / 在 Alterarcontato.java 中,index 显示创建变量的错误,getExtras 说:he method getExtas(String) is undefined for the type Intent 并说要添加一个 Intent,当我单击代码更改为:index = ((Object) getIntent()).getExtas("key");
  • 私有 mIndex,错误 Syntax error on token "mIndex", VariableDeclarator expected after this token,但 mIndex 不是变量吗?以及 onCreate(Bundle savedInstanceState) 中的错误`Alterarcontato 类型的 onCreate 方法只能设置公共/受保护/私有之一`
  • mIndex 是整数变量,将其声明为全局变量。在您的 Alterarcontato 活动的 onCreate() 方法中初始化变量。查看更新的代码。
【解决方案2】:

你可以试试给定的链接,希望对你有帮助

Contacts Contract API

【讨论】:

  • 如果有人已经知道并解释它会更好(如果可以解释这意味着你理解:D)
  • 不传递索引可以从 RAW_CONTACT_ID 常量中获取 id
  • 我需要一天的时间来创作,所以你很容易理解它
  • RAW_CONTACT_ID 怎么办?你能做到吗?
【解决方案3】:

查看this description on the Android Developers' 网站。它提供了良好的分步说明。本质上,您必须创建一个Intent 并使用 putExtra() 方法来传递数据。

编辑:另外,请查看 this answer to a similar question 关于使用 onListItemClick() 获取 ListActivity 中的行 ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多