如何使用发送的项目特定数据切换活动

时间:2012-04-05 17:16:25

标签: java android

我已经浏览了一下,可能是因为我不确定我在寻找什么,但我无法找到如何做一些我认为应该很容易使用android的东西。

我有一组要在屏幕上显示的数据。此数据是一个包含数据库密钥,名称和图像的类。

我目前正在将这些数据显示为ImageView和TextView。我遍历数组并向包含图像和文本的TableLayout添加一个新行。

我希望图片和文字都可以点击,然后更改为新活动。

此新活动需要知道所单击行的数据库键才能显示正确的数据。

这是我到目前为止所拥有的:

private void fillSuggestionTable(TableLayout tabSuggestions, Suggestion[] arrToAdd)
{
    for(int i = 0; i < arrToAdd.length; i++)
    {
        /* Create a new row to be added. */
        TableRow trSuggestion = new TableRow(this);
        trSuggestion.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

        /* Create objects for the row-content. */
        ImageView imgDisplayPicture = new ImageView(this);
        ImageHandler.loadBitmap(arrToAdd[i].strImageURL, imgDisplayPicture);
        imgDisplayPicture.setLayoutParams(new LayoutParams(50,50));

        TextView txtArtistName = new TextView(this);
        txtArtistName.setText(arrToAdd[i].strName);
        txtArtistName.setTextColor(Color.parseColor("#000000"));

        /* Add data to row. */
        trSuggestion.addView(imgDisplayPicture);
        trSuggestion.addView(txtArtistName);

        /* Add row to TableLayout. */
        tabSuggestions.addView(trSuggestion, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    }
}

3 个答案:

答案 0 :(得分:1)

要将额外数据传递给另一个Activity,您需要使用Intent.putExtra(名称,值)方法添加额外信息。

例如,发送意图:

Intent i = new Intent([pass info about next Activity here]);
i.putExtra("databaseKey", databaseKey);
startActivity(i);

要再次获取数据:

public void onCreate(Bundle savedInstance)
{
    // Do all initial setup here

    Bundle extras = getIntent().getExtras();
    if (extras != null && extras.containsKey("databaseKey"))
    {
        int databaseKey = extras.getInt("databaseKey");
        // Load database info
    }
    else
    {
        // No data was passed, do something else
    }
}

编辑:要找出单击表格行的时间,您需要实现View.OnClickListener并为您使用的TableRows设置onClickListener。

例如:

/* Create a new row to be added. */
TableRow trSuggestion = new TableRow(this);
trSuggestion.setOnClickListener([listener]);

您唯一的问题是将View的ID与相关的数据库行ID相关联。 HashMap应该有帮助。

答案 1 :(得分:1)

你有没有理由使用TableView? ListView&amp;和CursorAdapter&amp;自定义{{3}},适配器可以处理从数据库到ListView行的转换。此时,启动一个知道数据库ID的新活动是微不足道的:

mListView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
    Intent i = new Intent(MyActivity.this, MyOtherActivity.class);
    i.putExtra("database_id", id);
    startActivity(i);
  }
});

在MyOtherActivity中:

private int dbId;
protected void onCreate(Bundle savedInstanceState) {
  //do stuff
  dbId = getIntent().getIntExtra("database_id", -1); // the -1 is the default if the extra can't be found
}

答案 2 :(得分:0)

这是一个非常简单的程序。 This blog用简单的术语解释。