Android 如何从JSONARRAY数据动态地将行添加到表布局中?
我想向我的tableview动态添加行,就像iphone一样,有两个TextView和一个EditText,用于编辑Web服务的数据。我还想滚动tableview。我需要som示例代码,以便我可以继续,或者如果有任何alternet解决方案,请建议我 我有这个Json,希望将Json数据绑定到tableview中的每一行Android 如何从JSONARRAY数据动态地将行添加到表布局中?,android,tableview,Android,Tableview,我想向我的tableview动态添加行,就像iphone一样,有两个TextView和一个EditText,用于编辑Web服务的数据。我还想滚动tableview。我需要som示例代码,以便我可以继续,或者如果有任何alternet解决方案,请建议我 我有这个Json,希望将Json数据绑定到tableview中的每一行 try { json = new JSONObject(status); getArray_Meter_Reading = new JSONAr
try {
json = new JSONObject(status);
getArray_Meter_Reading = new JSONArray();
getArray_Meter_Reading = json.getJSONArray("meterReadings");
if (getArray_Meter_Reading.length() == 0) {
AlertDialog.Builder builder = new AlertDialog.Builder(
NewTransaction.this);
builder.setTitle("WARNING");
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setMessage("No Meters Found");
builder.setPositiveButton("ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
}
});
AlertDialog diag = builder.create();
diag.show();
}
} catch (JSONException e) {
e.printStackTrace();
}
请帮助我实现这一点,我是android新手,所以我需要帮助
任何一个伙伴都可以解决这个问题。
提前谢谢
public View getView(final int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
EditText ed_Current = (EditText) view.findViewById(R.id.ed_Current);
ed_Current.setTag(position);
ed_Current.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View arg0, boolean arg1) {
if (v == null) {
v = arg0;
int tag = (Integer) arg0.getTag();
Caption = (EditText) arg0;
previous_Meter_Reading = new HashMap<String, String>();
previous_Meter_Reading = c.get(tag);
String getPreviousReading = previous_Meter_Reading
.get("previousMeterReading");
String CumulativeIndex = previous_Meter_Reading
.get("Cumulative");
previousMeterReading = Integer.parseInt(getPreviousReading);
Cumulative = Integer.parseInt(CumulativeIndex);
}
Toast.makeText(context, "getPrevious" + previousMeterReading,
Toast.LENGTH_SHORT);
Toast.makeText(context, "Cumulative" + Cumulative,
Toast.LENGTH_SHORT);
Log.i("Hello", "getPrevious" + previousMeterReading);
Log.i("Hello1", "Cumulative" + Cumulative);
if (v != arg0) {
if (!Caption.getText().toString().equals("")
&& Cumulative == 1) {
int tag = ((Integer) arg0.getTag());
CurrentMeterReading = Integer.valueOf(Caption.getText()
.toString());
CurrentReading =new HashMap<String, Integer>();
CurrentReading.put("Tag"+tag,CurrentMeterReading);
getReading.add(CurrentReading);
Log.i("Curr", "Current" + CurrentMeterReading);
Log.i("Pre", "previous" + previousMeterReading);
if (CurrentMeterReading < previousMeterReading) {
AlertDialog.Builder builder = new AlertDialog.Builder(
context);
builder.setTitle("WARNING");
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setMessage("Please Enter UserName");
builder.setPositiveButton("ok",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int which) {
// Caption.requestFocus();
}
});
AlertDialog diag = builder.create();
diag.show();
// Caption.requestFocus();
// v = null;
// Caption = null;
}else if(Cumulative==0 && !Caption.getText().toString().equals("")){
//int tag1 = ((Integer) arg0.getTag());
CurrentMeterReading = Integer.valueOf(Caption.getText()
.toString());
CurrentReading =new HashMap<String, Integer>();
CurrentReading.put("Tag"+tag,CurrentMeterReading);
getReading.add(CurrentReading);
}
}
v = null;
Caption = null;
}
}
});
return view;
}
public View getView(最终int位置、视图转换视图、视图组父视图){
视图=super.getView(位置、转换视图、父级);
EditText ed_Current=(EditText)view.findViewById(R.id.ed_Current);
ed_电流设置标签(位置);
ed_Current.setOnFocusChangeListener(新视图.OnFocusChangeListener(){
public void onFocusChange(视图arg0,布尔值arg1){
如果(v==null){
v=arg0;
int标记=(整数)arg0.getTag();
标题=(编辑文本)arg0;
上一个仪表读数=新HashMap();
上一次仪表读数=c.get(标签);
字符串getPreviousReading=上一次仪表读数
.get(“previousMeterReading”);
字符串累积索引=上一次仪表读数
.获得(“累计”);
previousMeterReading=Integer.parseInt(getPreviousReading);
累积=整数.parseInt(累积索引);
}
Toast.makeText(上下文,“getPrevious”+previousMeterReading,
烤面包片(长/短);
Toast.makeText(上下文,“累计”+累计,
烤面包片(长/短);
Log.i(“Hello”、“getPrevious”+previousMeterReading);
Log.i(“Hello1”,“累计”+累计);
如果(v!=arg0){
如果(!Caption.getText().toString().equals(“”)
&&累积==1){
int标记=((整数)arg0.getTag());
CurrentMeterReading=Integer.valueOf(Caption.getText())
.toString());
CurrentReading=新建HashMap();
CurrentReading.put(“标记”+标记,CurrentMeterReading);
getReading.add(CurrentReading);
Log.i(“当前”、“当前”+CurrentMeterReading);
日志i(“前”、“前一次”+前一次读取);
如果(CurrentMeterReading
创建布局之后,首先需要检索json数据
然后将其存储在字符串[]中,根据
根据您的要求。例如,请完成以下操作
活动:-
公共类供应活动扩展活动{
可移植的私人桌面布局;
私有静态int-scont=0;
按钮btnAdd;
字符串[]pnames={“provision1”、“provision2”、“provision3”、“provision4”,
“条款5”};
字符串[]pprice={“45”、“85”、“125”、“15”、“198”};
高级消费;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnAdd=(按钮)findviewbyd(R.id.button1);
mTable=(TableLayout)findViewById(R.id.tableprovision);
xpenses=新的StringBuffer();
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
mTable.addView(addRow(pnames,pprice));
对于(int i=0;iLayout:-
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="154dp"
android:layout_marginLeft="42dp"
android:text="Total"
android:textColor="#000000" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView1"
android:layout_alignBottom="@+id/textView1"
android:layout_alignParentRight="true"
android:layout_marginRight="80dp"
android:text="TextView"
android:textColor="#000000" />
<TableLayout
android:id="@+id/tableprovision"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="74dp" >
</TableLayout>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="33dp"
android:text="Expenses "
android:textColor="#000000"
android:textSize="18sp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/textView3"
android:layout_marginRight="30dp"
android:text="Add" />
</RelativeLayout>
public class ProvisionActivity extends Activity {
private TableLayout mTable;
private static int sCount = 0;
Button btnAdd;
String[] pnames = { "provision1", "provision2", "provision3", "provision4",
"provision5" };
String[] pprice = { "45", "85", "125", "15", "198" };
StringBuffer xpenses;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnAdd = (Button) findViewById(R.id.button1);
mTable = (TableLayout) findViewById(R.id.tableprovision);
xpenses = new StringBuffer();
btnAdd.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mTable.addView(addRow(pnames, pprice));
for (int i = 0; i < mTable.getChildCount(); i++) {
mTable.getChildAt(i);
System.out.println("Table Row values are "
+ mTable.getChildAt(i));
xpenses = xpenses.append(mTable.getChildAt(i).toString());
System.out
.println("Expense Table Values Are After Storing it in a String variable "
+ xpenses);
}
}
});
}
private TableRow addRow(String[] sname, final String[] sprice) {
TableRow tr = new TableRow(this);
tr.setId(1000 + sCount);
tr.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
TableRow.LayoutParams blparams = new TableRow.LayoutParams(150, 35);
final Spinner spinner = new Spinner(this);
spinner.setLayoutParams(blparams);
spinner.setBackgroundColor(Color.DKGRAY);
ArrayAdapter<String> xtypeadapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_dropdown_item, sname);
spinner.setAdapter(xtypeadapter);
tr.addView(spinner);
TableRow.LayoutParams tlparams = new TableRow.LayoutParams(55,
TableLayout.LayoutParams.WRAP_CONTENT);
final TextView textView = new TextView(this);
textView.setLayoutParams(tlparams);
textView.setTextColor(Color.BLACK);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
textView.setText(" "
+ sprice[spinner.getSelectedItemPosition()]);
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
tr.addView(textView);
TableRow.LayoutParams blparams1 = new TableRow.LayoutParams(
TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT);
final Button button = new Button(this);
button.setLayoutParams(blparams1);
button.setBackgroundColor(Color.LTGRAY);
button.setText(" - ");
button.setId(2000 + sCount);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mTable.removeView(findViewById(v.getId() - 1000));
}
});
tr.addView(button);
sCount++;
return tr;
}
}