appI预览希望区分我通过单击按钮创建的edittext,并在特定的edittext上实现onclick侦听器
。
public class MainActivity extends AppCompatActivity
{
private LinearLayout parentLinearLayout;
EditText number;
View rowView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
number = rowView.findViewById(R.id.number_edit_text);
parentLinearLayout = (LinearLayout) findViewById(R.id.parent_linear_layout);
}
public void onAddField(View v)
{
LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView=inflater.inflate(R.layout.field, null);
// Add the new row before the add field button.
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount() - 1);
}
public void onDelete(View v)
{
parentLinearLayout.removeView((View) v.getParent());
}
}
我认为您希望访问RowView的edittext
。如果是这样,在添加新行时,您可以为该行设置id,稍后您可以使用该id访问所需行,或者可以通过创建列表
并将行添加到列表中,并且无论何时您想访问所需行,都可以通过列表
及其位置来访问。访问行的视图
后,可以使用它们自己的ID访问子视图(EditText
、Spinner
和ImageView
(或Button
))。
考虑以下布局是您的布局(您没有共享您的布局,所以我创建了类似的布局)。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/parent_linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onAddField"
android:layout_gravity="center"
android:text="Add" />
</LinearLayout>
field.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/row_edit_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/row_spinner"
app:layout_constraintTop_toTopOf="parent"/>
<Spinner
android:id="@+id/row_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@id/row_remove"
app:layout_constraintTop_toTopOf="@id/row_edit_text"
app:layout_constraintBottom_toBottomOf="@id/row_edit_text"/>
<ImageView
android:id="@+id/row_remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_close"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/row_edit_text"
app:layout_constraintBottom_toBottomOf="@id/row_edit_text"/>
</androidx.constraintlayout.widget.ConstraintLayout>
第一个选项:为每一行设置id并使用该id访问行。获取行后,您可以使用它自己的ID获取子视图的。
mainactivity.java
public class MainActivity extends AppCompatActivity {
private LinearLayout parentLinearLayout;
//Variable for id and assign it to 0
int id = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
parentLinearLayout = findViewById(R.id.parent_linear_layout);
}
public void onAddField(View view) {
View v = getLayoutInflater().inflate(R.layout.field, null);
//Set id for new row
v.setId(id);
//Access your ImageView (or Button-I added as ImageView) and set ClickListener
// for removing current row with this ImageView (or Button)
ImageView img = v.findViewById(R.id.row_remove);
img.setOnClickListener(v1 -> parentLinearLayout.removeView(v));
//Add your view into the parent layout
parentLinearLayout.addView(v, parentLinearLayout.getChildCount() - 1);
//Increase id so every added row will have different id
id++;
}
//This method will return row's EditText. id is the same id which we set while adding
// new row (don't forget it starts with 0)
private EditText getRowEditText(int id){
//Get row's view with its id
View v = findViewById(id);
//Access row's EditText
return v.findViewById(R.id.row_edit_text);
}
////This method will return row's Spinner
private Spinner getRowSpinner(int id){
//Get row's view with its id
View v = findViewById(id);
//Access row's Spinner
return v.findViewById(R.id.row_spinner);
}
}
第二个选项:创建列表
并且每当您创建一个新行时,也将该行添加到列表中(使用此选项,您不需要使用id)。
public class MainActivity extends AppCompatActivity {
private LinearLayout parentLinearLayout;
private List<View> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
parentLinearLayout = findViewById(R.id.parent_linear_layout);
list = new ArrayList<>();
}
public void onAddField(View view) {
View v = getLayoutInflater().inflate(R.layout.field, null);
ImageView img = v.findViewById(R.id.row_remove);
img.setOnClickListener(v1 -> parentLinearLayout.removeView(v));
parentLinearLayout.addView(v, parentLinearLayout.getChildCount() - 1);
//Add current row into the list
list.add(v);
}
private EditText getRowEditText(int position){
//Get row's view with its position
View v = list.get(position);
//Return row's EditText
return v.findViewById(R.id.row_edit_text);
}
private Spinner getRowSpinner(int position){
//Get row's view with its position
View v = list.get(position);
//Return row's EditText
return v.findViewById(R.id.row_spinner);
}
}
问题内容: 我正在尝试使用HiveCLI上的动态分区从另一个表创建一个新表。我正在从Hive官方Wiki学习,这里有以下示例: 但是我收到了这个错误: 失败:SemanticException [错误10065]: CREATE TABLE AS SELECT命令无法指定目标表的列列表 资料来源:https : //cwiki.apache.org/confluence/display/Hive/
我有一个rabbitListener,它连续异步地侦听队列“用户消息”的用户消息。除非队列中加载了大量消息,否则一切都正常。当消息批量发布到队列时,同一用户的消息首先被处理,从而其他用户的消息等待轮到他们。 我无法使用优先级队列,因为所有用户的优先级都相同。所以我想创建新的队列,并在运行时监听它们。一旦消息被使用,所有队列都将是短暂的。(队列将被删除) 在浏览时,我发现可以使用RabbitAdmi
我已经阅读了讨论这个问题的其他问题,除了创建的第一个问题之外,它们都适用于我的布局。 目前,这是我的方法的顶部: ^这使得它至少键盘不会在启动时弹出,但仍然专注于。 这是我的的: 这是我提起我的活动时的样子: 问题是,对于某些手机,当像这样聚焦时,它们无法在其中写入。我希望它不对焦。 我所做的工作适用于接下来提出的布局,因为<code>编辑文本 请注意,它的布局是相同的。这是用户返回此屏幕后的屏幕
问题内容: 我在使用primefaces树实现实现动态树结构时遇到了一些麻烦。在primeface提供的展示柜中,代码的结构如下所示。但是,这是非常静态的。我试图弄清楚如何处理从数据库中获取的数据,在编译时树的深度是未知的。 我以为我可能需要某种递归方法来实现此目的,但我无法完全理解实现的样子。 有什么想法吗? 以下是primefaces的示例代码 问题答案:
我有一个按钮和一个文本框。当我在textbox中放置一个值并单击此按钮时,将创建一个新按钮,该值填充在textbox中,但我希望当我再次单击Button1时,应该还有一个按钮,或者我们可以说如何移动上一个按钮的位置? 请帮我解决这个问题。提前谢了。
问题内容: 你好,我有这个设置 我需要为每个按钮获取以下内容 在Java中是否可以为我声明的每个按钮动态创建此按钮?因为当我有5个按钮时,我不需要3x5 = 15行代码,而是只有几行具有动态创建的按钮。 问题答案: 编写一个小循环并将您的按钮存储在数组中: