Java 如何从linearlayout中动态创建的EditText和TextView中获取数据?
在my main.xml中,我有一个线性布局:Java 如何从linearlayout中动态创建的EditText和TextView中获取数据?,java,android,android-layout,android-edittext,textview,Java,Android,Android Layout,Android Edittext,Textview,在my main.xml中,我有一个线性布局: <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/linearMain" > </LinearLayout> 用户将能够输入项
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/linearMain"
>
</LinearLayout>
用户将能够输入项目的数量,因此,单击按钮后,将操纵文本视图
要填充此文本视图,我需要循环所有创建的项目,以检查价格和用户输入的数字。我尝试使用以下代码,但是我无法访问我想要的特定项目,因为我在每行中都有2个TextView和1个editText:
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// code will be here
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
total = 0 ;
View v1 = null;
for(int i=0; i<lm.getChildCount(); i++) {
v1 = lm.getChildAt(i);
}
}
});
btn.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
//代码会在这里
btn.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
总数=0;
视图v1=null;
对于(int i=0;i您可以使用视图的标记参数(TextView、EditText等):setTag(Object).Tags本质上是可以与视图关联的额外信息。它们通常用于方便地将与视图相关的数据存储在视图中,而不是将其放在单独的结构中。有关详细信息,请查看Android
另外,要使用您的方法,您可以将RecyclerView(或旧的ListView)与ViewHolder一起使用。这已在评论中提到。回答您的问题:
问题在于,您的“product”、“pricetxt”、“btn”变量是局部变量,在当前循环迭代结束后会被垃圾收集
您可以在项目中实现视图持有者模式
创建名为ViewHolder的类
class ViewHolder{
LinearLayout ll;
TextView product;
TextView pricetxt ;
TextView currency ;
TextView qtylabel ;
EditText qty ;}
public ViewHolder(LinearLayout ll TextView product TextView pricetxt TextView currency TextView qtylabel EditText qty)
{
this.l1= l1;
this.product=product;
this.pricetxt=pricetxt;
this.currency = currency;
this.qtylabel = qtylevel;
this.qty = qty;
}
这个类可以通过传递所有这些参数(qty、pricetxt等)来保存所有数据。
现在,您必须在顶部维护此ViewHolder对象的列表-
List myList<ViewHolder> = new ArrayList<ViewHolder>();
myList.add(当前视图);
myList.add(当前视图)
您可以访问列表中“索引”位置处维护的任何ViewHolder对象,如下所示:
或编辑文本“数量”为
这样,即使循环迭代结束,您也可以访问创建的EditText和TextView
我的建议:-没有人这样做。正如这里的一些人建议的那样,你应该使用android实现推荐的,这比当前的实现更有效。如果你甚至可以这样做。看起来你可以使用ViewHolder模式。你确定不能将RecyclerView用于你的用例吗?
List myList<ViewHolder> = new ArrayList<ViewHolder>();
ViewHolder currentView = new ViewHolder(l1.product,pricetxt,currency,qtylabel,qty);
myList.get(index);
myList.get(index).qty;