gpt4 book ai didi

java - Android给出线性布局标签

转载 作者:行者123 更新时间:2023-12-02 06:59:58 34 4
gpt4 key购买 nike

我正在尝试从数据库中获取一些数据,并为每一行数据创建一个新的线性布局。唯一的问题是我不知道如何为每个创建的 LinearLayouts 提供一个 id,并使用该 id,以便当单击布局时,我知道它是哪一个,例如第四个或第一个。当我尝试此操作时,我收到 IndexOutOfBoundException。我为此使用 set 和 getTag,并使用计数器变量作为 id:

// Fill data
db.open();
// Get all of the rows from the database and create the item list
Cursor mNotesCursor = db.fetchAllNotes();
this.startManagingCursor(mNotesCursor);

int counter = 0;

while (mNotesCursor.moveToNext()) {
String titleText = (mNotesCursor.getString(mNotesCursor
.getColumnIndex("title")));

String bodyText = mNotesCursor.getString(mNotesCursor
.getColumnIndex("body"));

String dateText = mNotesCursor.getString(mNotesCursor
.getColumnIndex("date"));

final LinearLayout cardsLayout = new LinearLayout(this);
cardsLayout.setOrientation(LinearLayout.VERTICAL);
cardsLayout.setBackgroundDrawable(getResources().getDrawable(
R.drawable.card_container_background));
cardsLayout.setTag(counter);

LinearLayout.LayoutParams layouLinearParams = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

RelativeLayout titleLayout = new RelativeLayout(this);
titleLayout.setPadding(4, 4, 4, 4);

// Title text
TextView tvTitle = new TextView(this);
tvTitle.setText(titleText);

// Text Font Attributes
tvTitle.setTextColor(getResources().getColor(R.color.textColor));
tvTitle.setTypeface(robotoLight);
tvTitle.setTextSize(25);

titleLayout.addView(tvTitle);
titleLayout.setLayoutParams(layouLinearParams);

RelativeLayout.LayoutParams titleRelativeParams = (RelativeLayout.LayoutParams) tvTitle
.getLayoutParams();
titleRelativeParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

tvTitle.setLayoutParams(titleRelativeParams);

// Date text
TextView tvDate = new TextView(this);
tvDate.setText(dateText);

// Text Font Attributes
tvDate.setTextColor(getResources().getColor(R.color.textColor));
tvDate.setTypeface(robotoLight);
tvDate.setTextSize(15);

titleLayout.addView(tvDate);

RelativeLayout.LayoutParams dateRelativeParams = (RelativeLayout.LayoutParams) tvDate
.getLayoutParams();
dateRelativeParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

tvDate.setLayoutParams(dateRelativeParams);

// Body Text
TextView tvBody = new TextView(this);
tvBody.setText(bodyText);

// Text Font Attributes
tvBody.setTypeface(robotoLight);
tvTitle.setTextColor(getResources().getColor(R.color.textColor));
tvBody.setTextSize(20);

tvBody.setPadding(4, 4, 4, 4);

cardsLayout.addView(titleLayout);
cardsLayout.addView(tvBody);
root.addView(cardsLayout);

cardsLayout.setOnClickListener( new View.OnClickListener() {

public void onClick(View v) {

Intent i = new Intent(NotesListActivity.this, NoteEdit.class);
i.putExtra(NotesDbAdapter.KEY_ROWID, (Integer)cardsLayout.getTag());
startActivityForResult(i, ACTIVITY_EDIT);
}
});

}
this.stopManagingCursor(mNotesCursor);
db.close();

}

最佳答案

将元素从 xml 布局映射到 Java 对象(即使用 findViewById)时,布局/复合/ View ID 非常有用,但是当您在 Java 中创建对象时,我会坚持使用 Java 构造而不是特定于 Android 布局的结构概念。实现此目的的一种方法是实现 OnClickListener 并添加您希望在用户单击时可用的数据。

例如,创建此类:(可以是 Activity 中的内部类或静态类)

private class CardClickListener implements View.OnClickListener {
private int id;
CardClickListener(int id) {
this.id = id;
}
public void onClick(View v) {
Log.d("XYZ", "My id is: " + id);

Intent i = new Intent(NotesListActivity.this, NoteEdit.class);
// i.putExtra(NotesDbAdapter.KEY_ROWID, (Integer)cardsLayout.getTag());
i.putExtra(NotesDbAdapter.KEY_ROWID, id);
startActivityForResult(i, ACTIVITY_EDIT);
}
}

然后在设置 onClickListener 时,这样做:

cardsLayout.setOnClickListener(new CardClickListener(counter) );

CardClickListener 在其私有(private)成员变量 id 中跟踪您的 id。然后您可以在 onClick 方法中使用它。

关于java - Android给出线性布局标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16795245/

34 4 0