如何在循环中使用 addView 在 table 布局中创建行
How to use addView in loop to make a rows in table layout
我想制作一个 table,它必须使用 JSON 和截击从我的数据库中调用我的数据,所以我需要循环它。在我的循环中,我有一些文本视图,我使用 addView
将其添加到 row.The addView
如果我的数据库中只有一行数据,则效果很好,但它会出错如果我有更多的话。错误是
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first
.
因此,我认为它会出错,因为循环调用了相同的 addView
。
抱歉,我的英语不太流利:)
这是我的代码:
public class DaftarNilaiUtama3 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daftar_nilai_utama3);
final TableLayout tableview = (TableLayout) findViewById(R.id.tableview);
final TableRow row = new TableRow(this);
final TextView tvModul = new TextView(this);
final TextView tvRes = new TextView(this);
final TextView tvPost = new TextView(this);
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(5,5,0,5);
row.setLayoutParams(lp);
Response.Listener responseListener= new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
List<String> item = new ArrayList<String>();
JSONArray jsonMainNode = new JSONArray(response);
JSONObject jsonResponse = new JSONObject();
for (int i = 0; i < jsonMainNode.length(); i++) {
jsonResponse = jsonMainNode.getJSONObject(i);
String nama_modul = jsonResponse.optString("nama_modul");
String responsi_nilai = jsonResponse.optString("responsi_nilai");
String posttest_nilai = jsonResponse.optString("posttest_nilai");
tvModul.setGravity(Gravity.CENTER);
tvModul.setTextSize(12.0f);
tvModul.setBackgroundColor(Color.parseColor("#eeeeee"));
tvModul.setTypeface(null, Typeface.BOLD);
tvModul.setText(nama_modul);
row.addView(tvModul);
tvRes.setGravity(Gravity.CENTER);
tvRes.setTextSize(12.0f);
tvRes.setBackgroundColor(Color.parseColor("#eeeeee"));
tvRes.setTypeface(null, Typeface.BOLD);
tvRes.setText(responsi_nilai);
row.addView(tvRes);
tvPost.setGravity(Gravity.CENTER);
tvPost.setTextSize(12.0f);
tvPost.setBackgroundColor(Color.parseColor("#eeeeee"));
tvPost.setTypeface(null, Typeface.BOLD);
tvPost.setText(posttest_nilai);
row.addView(tvPost);
tableview.addView(row);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
RequestTableDNU3 lvReq = new RequestTableDNU3(nama_klp,nama_mhs, responseListener);
RequestQueue queue = Volley.newRequestQueue(DaftarNilaiUtama3.this);
queue.add(lvReq);
}
}
您需要为要添加的每一行创建行布局对象(新的 TableRow 和新的 TextView)。这应该有效:
public class DaftarNilaiUtama3 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daftar_nilai_utama3);
final TableLayout tableview = (TableLayout) findViewById(R.id.tableview);
Response.Listener responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
List<String> item = new ArrayList<String>();
JSONArray jsonMainNode = new JSONArray(response);
JSONObject jsonResponse = new JSONObject();
for (int i = 0; i < jsonMainNode.length(); i++) {
jsonResponse = jsonMainNode.getJSONObject(i);
final TableRow row = new TableRow(this);
final TextView tvModul = new TextView(this);
final TextView tvRes = new TextView(this);
final TextView tvPost = new TextView(this);
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(5, 5, 0, 5);
row.setLayoutParams(lp);
String nama_modul = jsonResponse.optString("nama_modul");
String responsi_nilai = jsonResponse.optString("responsi_nilai");
String posttest_nilai = jsonResponse.optString("posttest_nilai");
tvModul.setGravity(Gravity.CENTER);
tvModul.setTextSize(12.0f);
tvModul.setBackgroundColor(Color.parseColor("#eeeeee"));
tvModul.setTypeface(null, Typeface.BOLD);
tvModul.setText(nama_modul);
row.addView(tvModul);
tvRes.setGravity(Gravity.CENTER);
tvRes.setTextSize(12.0f);
tvRes.setBackgroundColor(Color.parseColor("#eeeeee"));
tvRes.setTypeface(null, Typeface.BOLD);
tvRes.setText(responsi_nilai);
row.addView(tvRes);
tvPost.setGravity(Gravity.CENTER);
tvPost.setTextSize(12.0f);
tvPost.setBackgroundColor(Color.parseColor("#eeeeee"));
tvPost.setTypeface(null, Typeface.BOLD);
tvPost.setText(posttest_nilai);
row.addView(tvPost);
tableview.addView(row);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
RequestTableDNU3 lvReq = new RequestTableDNU3(nama_klp, nama_mhs, responseListener);
RequestQueue queue = Volley.newRequestQueue(DaftarNilaiUtama3.this);
queue.add(lvReq);
}
}
试试这个。您必须为循环中的每个迭代创建 table 行,然后必须添加到 table 布局。添加上下文 DaftarNilaiUtama3.this
for (int i = 0; i < jsonMainNode.length(); i++) {
final TableRow row = new TableRow(DaftarNilaiUtama3 .this);
jsonResponse = jsonMainNode.getJSONObject(i);
String nama_modul = jsonResponse.optString("nama_modul");
String responsi_nilai = jsonResponse.optString("responsi_nilai");
String posttest_nilai = jsonResponse.optString("posttest_nilai");
tvModul.setGravity(Gravity.CENTER);
tvModul.setTextSize(12.0f);
tvModul.setBackgroundColor(Color.parseColor("#eeeeee"));
tvModul.setTypeface(null, Typeface.BOLD);
tvModul.setText(nama_modul);
row.addView(tvModul);
tvRes.setGravity(Gravity.CENTER);
tvRes.setTextSize(12.0f);
tvRes.setBackgroundColor(Color.parseColor("#eeeeee"));
tvRes.setTypeface(null, Typeface.BOLD);
tvRes.setText(responsi_nilai);
row.addView(tvRes);
tvPost.setGravity(Gravity.CENTER);
tvPost.setTextSize(12.0f);
tvPost.setBackgroundColor(Color.parseColor("#eeeeee"));
tvPost.setTypeface(null, Typeface.BOLD);
tvPost.setText(posttest_nilai);
row.addView(tvPost);
tableview.addView(row);
}
我想制作一个 table,它必须使用 JSON 和截击从我的数据库中调用我的数据,所以我需要循环它。在我的循环中,我有一些文本视图,我使用 addView
将其添加到 row.The addView
如果我的数据库中只有一行数据,则效果很好,但它会出错如果我有更多的话。错误是
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first
.
因此,我认为它会出错,因为循环调用了相同的 addView
。
抱歉,我的英语不太流利:)
这是我的代码:
public class DaftarNilaiUtama3 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daftar_nilai_utama3);
final TableLayout tableview = (TableLayout) findViewById(R.id.tableview);
final TableRow row = new TableRow(this);
final TextView tvModul = new TextView(this);
final TextView tvRes = new TextView(this);
final TextView tvPost = new TextView(this);
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(5,5,0,5);
row.setLayoutParams(lp);
Response.Listener responseListener= new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
List<String> item = new ArrayList<String>();
JSONArray jsonMainNode = new JSONArray(response);
JSONObject jsonResponse = new JSONObject();
for (int i = 0; i < jsonMainNode.length(); i++) {
jsonResponse = jsonMainNode.getJSONObject(i);
String nama_modul = jsonResponse.optString("nama_modul");
String responsi_nilai = jsonResponse.optString("responsi_nilai");
String posttest_nilai = jsonResponse.optString("posttest_nilai");
tvModul.setGravity(Gravity.CENTER);
tvModul.setTextSize(12.0f);
tvModul.setBackgroundColor(Color.parseColor("#eeeeee"));
tvModul.setTypeface(null, Typeface.BOLD);
tvModul.setText(nama_modul);
row.addView(tvModul);
tvRes.setGravity(Gravity.CENTER);
tvRes.setTextSize(12.0f);
tvRes.setBackgroundColor(Color.parseColor("#eeeeee"));
tvRes.setTypeface(null, Typeface.BOLD);
tvRes.setText(responsi_nilai);
row.addView(tvRes);
tvPost.setGravity(Gravity.CENTER);
tvPost.setTextSize(12.0f);
tvPost.setBackgroundColor(Color.parseColor("#eeeeee"));
tvPost.setTypeface(null, Typeface.BOLD);
tvPost.setText(posttest_nilai);
row.addView(tvPost);
tableview.addView(row);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
RequestTableDNU3 lvReq = new RequestTableDNU3(nama_klp,nama_mhs, responseListener);
RequestQueue queue = Volley.newRequestQueue(DaftarNilaiUtama3.this);
queue.add(lvReq);
}
}
您需要为要添加的每一行创建行布局对象(新的 TableRow 和新的 TextView)。这应该有效:
public class DaftarNilaiUtama3 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daftar_nilai_utama3);
final TableLayout tableview = (TableLayout) findViewById(R.id.tableview);
Response.Listener responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
List<String> item = new ArrayList<String>();
JSONArray jsonMainNode = new JSONArray(response);
JSONObject jsonResponse = new JSONObject();
for (int i = 0; i < jsonMainNode.length(); i++) {
jsonResponse = jsonMainNode.getJSONObject(i);
final TableRow row = new TableRow(this);
final TextView tvModul = new TextView(this);
final TextView tvRes = new TextView(this);
final TextView tvPost = new TextView(this);
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(5, 5, 0, 5);
row.setLayoutParams(lp);
String nama_modul = jsonResponse.optString("nama_modul");
String responsi_nilai = jsonResponse.optString("responsi_nilai");
String posttest_nilai = jsonResponse.optString("posttest_nilai");
tvModul.setGravity(Gravity.CENTER);
tvModul.setTextSize(12.0f);
tvModul.setBackgroundColor(Color.parseColor("#eeeeee"));
tvModul.setTypeface(null, Typeface.BOLD);
tvModul.setText(nama_modul);
row.addView(tvModul);
tvRes.setGravity(Gravity.CENTER);
tvRes.setTextSize(12.0f);
tvRes.setBackgroundColor(Color.parseColor("#eeeeee"));
tvRes.setTypeface(null, Typeface.BOLD);
tvRes.setText(responsi_nilai);
row.addView(tvRes);
tvPost.setGravity(Gravity.CENTER);
tvPost.setTextSize(12.0f);
tvPost.setBackgroundColor(Color.parseColor("#eeeeee"));
tvPost.setTypeface(null, Typeface.BOLD);
tvPost.setText(posttest_nilai);
row.addView(tvPost);
tableview.addView(row);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
RequestTableDNU3 lvReq = new RequestTableDNU3(nama_klp, nama_mhs, responseListener);
RequestQueue queue = Volley.newRequestQueue(DaftarNilaiUtama3.this);
queue.add(lvReq);
}
}
试试这个。您必须为循环中的每个迭代创建 table 行,然后必须添加到 table 布局。添加上下文 DaftarNilaiUtama3.this
for (int i = 0; i < jsonMainNode.length(); i++) {
final TableRow row = new TableRow(DaftarNilaiUtama3 .this);
jsonResponse = jsonMainNode.getJSONObject(i);
String nama_modul = jsonResponse.optString("nama_modul");
String responsi_nilai = jsonResponse.optString("responsi_nilai");
String posttest_nilai = jsonResponse.optString("posttest_nilai");
tvModul.setGravity(Gravity.CENTER);
tvModul.setTextSize(12.0f);
tvModul.setBackgroundColor(Color.parseColor("#eeeeee"));
tvModul.setTypeface(null, Typeface.BOLD);
tvModul.setText(nama_modul);
row.addView(tvModul);
tvRes.setGravity(Gravity.CENTER);
tvRes.setTextSize(12.0f);
tvRes.setBackgroundColor(Color.parseColor("#eeeeee"));
tvRes.setTypeface(null, Typeface.BOLD);
tvRes.setText(responsi_nilai);
row.addView(tvRes);
tvPost.setGravity(Gravity.CENTER);
tvPost.setTextSize(12.0f);
tvPost.setBackgroundColor(Color.parseColor("#eeeeee"));
tvPost.setTypeface(null, Typeface.BOLD);
tvPost.setText(posttest_nilai);
row.addView(tvPost);
tableview.addView(row);
}