我需要更改数据表中一系列标题单元格的文本.
为了实现这一点,我需要检索并存储分配给这些单元格的视图ID,以便稍后可以使用它们来识别这些单元格视图.
但是,当我尝试获取刚刚膨胀的单元格视图的ID时,它总是返回-1.
这是我的示例代码:
@Override
public View getView(final int row, final int column, View converView, ViewGroup parent) {
if (converView == null) {
converView = inflater.inflate(getLayoutResource(row, column), parent, false);
if (row == -1){
int viewId = converView.getId();
setHeaderId(viewId, column+1);
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
尽管视图id已经被分配并且在代码调试期间可以查看,但上面代码中的converView.getId()返回-1.例如,我在调试期间可以看到以下内容:converView = LinearLayout(id = 830042440680)
知道为什么我在上面的代码中得到-1(= NO_ID)?
在我的应用程序中,我正在创建Views- 在这种情况下EditText- 动态.但View我添加的每一个都需要有一个唯一的ID.
EditText editText = new EditText(context);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
editText.setLayoutParams(params);
// Which value am I supposed to use here?
editText.setId(value);
layout.addView(editText);
Run Code Online (Sandbox Code Playgroud)
如果我分配一个随机值,我害怕冲突,我想不出任何方式生成id而没有冲突的可能性.
请注意,我不知道可以在res/values/ids.xml中定义一组固定的ID,但这不是我想要的!我需要动态创建ID!我不知道我需要多少.
那么有没有安全的方法来生成ID?
View包含一个方法setId(int)。我的问题是,如何以编程方式为对象提供一个不与任何资源 ID 重叠的 ID R?
在我的活动中,我正在创建一个动态的无线电组.我在Sqlite数据库中有一些问题和答案,在活动中检索它们然后在RadioGroup中设置.这工作正常.但在那之后,我希望用户获得所选的单选按钮的所有ID以将它们存储在数据库中.一般来说,当我们有选项的ID时,我们会这样做:
id1=rdgroup1.getCheckedRadioButtonId();
que1=(RadioButton)findViewById(id1);
ans1=que1.getId()+""; // so here I will get radio button's ID.
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,我将如何获得所选单选按钮的ID.这是我动态创建radiogroup的代码.
LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.linear1);
c1=db.rawQuery("SELECT * FROM QueTable WHERE AgeGroup='10-20'", null);
c1.moveToFirst();
int i = c1.getCount();
if(i > 0)
{
Log.w("START", "start");
while (i > 0)
{
TextView title = new TextView(this);
questions = c1.getString(1);
title.setText(questions);
title.setTextColor(Color.BLACK);
mLinearLayout.addView(title);
// create radio button
answers=c1.getString(2);
String[] answer = answers.split(",");
rb = new RadioButton[5];
rg = new RadioGroup(this);
rg.setOrientation(RadioGroup.VERTICAL);
int k = answer.length;
for (int j = 0; …Run Code Online (Sandbox Code Playgroud) 我以编程方式创建了一个视图分页器,并将此视图分页器添加到布局中,但它不会运行.
ViewPager viewPager = new ViewPager(this);
viewPager.setAdapter(new MyPagerAdapter());
addView(viewPager);
Run Code Online (Sandbox Code Playgroud)
视图寻呼机无效; 但是当我从XML使用它时它工作正常.我想动态地使用它.
我有以下问题:
在 Android Studio 中,EditText当ExerciseButton单击an 时,我会动态生成 en :
public void exerciseButtonClick(View view) {
EditText exercise = new EditText(this);
exercise.setId(exerciseId);
exerciseId++;
}
Run Code Online (Sandbox Code Playgroud)
稍后在代码中,我想EditText通过 ID引用所有我的 。我正在尝试这样的事情,但这不起作用:
for (int i = 1; i < exerciseId; i++) {
EditText currentEditText = (EditText) findViewById(i);
// further instructions on that EditText
}
Run Code Online (Sandbox Code Playgroud)
错误当然在这里:findViewById(i),显示预期资源类型为 id。我怎么解决这个问题?
我已经定义了几个布局,其中很少有id是多个定义的.我很困惑它是如何工作的?为什么它不像我们进入java代码那样给出错误?最重要的是,环境如何决定它需要调用哪个组件?
我理解id生成的过程是自动化的,它被添加到R.java中.例如,如果我们有相同的ID,在两个XML中说"image1",比如说"layout1"和"layout2".但在R.java中它不会有2个ID.这意味着它一次只能引用一个组件.
如果我们必须在Activity中使用2个XML,一个作为activity.setcontentview(layout1),另一个作为PopupWindow.setContentView(layout2).在这种情况下会发生什么?
可能是它非常基本的问题,但我错过了什么吗?
我知道如何通过调用动态地分配ID setID().由于ID是唯一的,我曾经使用ids.xml并setID()从预先生成的ID池中传递给ID.
问题1:有没有办法在不使用的情况下分配ID,ids.xml因为我无法预测运行时需要多少ID?
我试图绕过问题1中提出的第一个问题,动态分配每个基于其标签的哈希值的ID(每个标签都是唯一的),但没有办法保证ID不会与ID的自动生成冲突R.java.
问题1.1:如何解决ID命名冲突?
问题2:假设我具有动态分配和生成的ID值.由于未出现上述ID R.id,findViewById()因此不适用于检索视图.因此,当ID已知时,如何检索视图?
答案2:只有在onCreate()返回控制(终止)后,才能通过相应的ID检索视图.