2

我环顾四周,可能是因为我不确定我在寻找什么,但我不知道如何做一些我认为在 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));
    }
}
4

3 回答 3

1

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

例如,发送 Intent:

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

您将遇到的唯一问题是将视图的 ID 与相关的数据库行 ID 相关联。HashMap 应该会有所帮助。

于 2012-04-05T17:32:35.373 回答
1

您使用 TableView 是否有原因?使用ListView和自定义CursorAdapter似乎您想要完成的工作会容易得多,适配器可以处理从数据库到 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
}
于 2012-04-05T17:34:14.697 回答
0

这是一个非常简单的过程。这个博客用简单的术语解释它。

于 2012-04-05T17:33:28.153 回答