Android 如何编辑已动态添加的TextView?
我目前正在开发一个计数器应用程序。通过按下“添加”按钮,可添加特定元素的新行。文本视图和2个按钮是其中的3个元素。我在文本视图编号的两侧各有两个按钮,当我按下左侧的按钮时,它会将一个按钮添加到文本视图中。这很好,但是当我动态添加新行时,当我按下按钮时,它会更改第一个动态添加行的值,而不是我单击按钮的行的值。它如何才能获得单击按钮后添加到该特定行的行。代码如下: 主要活动:Android 如何编辑已动态添加的TextView?,android,android-linearlayout,Android,Android Linearlayout,我目前正在开发一个计数器应用程序。通过按下“添加”按钮,可添加特定元素的新行。文本视图和2个按钮是其中的3个元素。我在文本视图编号的两侧各有两个按钮,当我按下左侧的按钮时,它会将一个按钮添加到文本视图中。这很好,但是当我动态添加新行时,当我按下按钮时,它会更改第一个动态添加行的值,而不是我单击按钮的行的值。它如何才能获得单击按钮后添加到该特定行的行。代码如下: 主要活动: public class MainActivity extends AppCompatActivity { pri
public class MainActivity extends AppCompatActivity {
private LinearLayout parentLinearLayout;
private int numtest = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
parentLinearLayout = (LinearLayout) findViewById(R.id.parent_linear_layout);
}
public void onAddField(View v) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView = inflater.inflate(R.layout.field, null);
// Add the new row before the add field button.
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount() - 1);
}
public void addone(View v){
numtest+=1;
TextView t = (TextView) findViewById(R.id.counter);
t.setText(numtest+"");
}
public void subtractone(View v){
numtest-=1;
TextView t = (TextView) findViewById(R.id.counter);
t.setText(numtest+"");
}
}
field.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal" >
<EditText
android:id="@+id/edit_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:inputType="textWebEditText"/>
<Spinner
android:id="@+id/type_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:entries="@array/types"
android:gravity="right" />
<Button
android:id="@+id/add_button"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:background="@android:drawable/ic_delete"
android:onClick="addone"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:text="0"
android:id="@+id/counter"
android:textSize="30dp"
android:layout_centerHorizontal="true"/>
<Button
android:id="@+id/subtract_button"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:background="@android:drawable/ic_delete"
android:onClick="subtractone"/>
</LinearLayout>
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent_linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:orientation="vertical" >
<Button
android:id="@+id/add_field_button"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="#555"
android:layout_gravity="center"
android:onClick="onAddField"
android:textColor="#FFF"
android:text="Add Field"
android:paddingLeft="5dp"/>
</LinearLayout>
提前感谢我认为您应该跟踪在父布局中单击按钮的索引。一个简单的方法是查看标记
public void onAddField(View v) {
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView = inflater.inflate(R.layout.field, null);
// Add the new row before the add field button.
//put index tag on your view
rowView.findViewById(R.id.add_button).setTag(parentLinearLayout.getChildCount() - 1)
rowView.findViewById(R.id.substract_button).setTag(parentLinearLayout.getChildCount() - 1)
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount() - 1);
}
现在你有了要跟踪的索引,你就可以得到要更新的视图了
public void addone(View v){
numtest+=1;
View parent = parentLinearLayout.getChildAt(v.getTag());
TextView t = (TextView) parent.findViewById(R.id.counter);
t.setText(numtest+"");
} /// similarly for other method substract
希望这对您有用您可以声明一个计数器变量并用零初始化它,每次用户单击“添加”按钮时增加一个计数器变量,然后通过
rowView.setId(计数器)将其值设置为新创建的rowView的id
然后您可以通过其id唯一地标识每一行,因此您可以控制应该增加/减少的计数器。从何处调用addone()
。?不要在方法中初始化文本视图。在onCreate中完成。谢谢,它成功了。但是,我现在有一个问题,第二行的数字是从前一行的数字加上的,而不是从0开始。你是说numtest变量?是的numtest变量。我想问的是,有没有一种方法可以为每个动态添加的新行创建一个单独的numtest变量。因为所有行的numtest值都相同,所以出现问题。