Java 如何从linearlayout中动态创建的EditText和TextView中获取数据?

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> 用户将能够输入项

在my main.xml中,我有一个线性布局:

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