开发者

Setting table data in an activity - will this approach work

I have a simple table layout that I want to populate just by initialising a specific type of object in my onCreate method. First off this is the layout I have

jobs_table.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:id="@+id/Jobs"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:stretchColumns="*"
             xmlns:android="http://schemas.android.com/apk/res/android">
    <TableRow android:id="@+id/JobRow" android:layout_width="wrap_content" android:layout_height="wrap_content">
        <TextView android:id="@+id/JobID" android:layout_column="1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/black"></TextView>
        <TextView android:id="@+id/JobStatus" android:layout_column="2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/black"></TextView>
        <TextView android:id="@+id/Customer" android:layout_column="3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/black"></TextView>
        <TextView android:id="@+id/Department" android:layout_column="4" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/black"></TextView>
        <TextView android:id="@+id/DocType" android:layout_column="5" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/black"></TextView>
    </TableRow> 
</TableLayout>

And the activity

package com.producermobile;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TableLayout;

import com.producermobile.jobs.ProducerJobRows;

public class JobRowsActivity extends Activity { 

    private BatchingJobRows jobRows;    

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.jobs_table);
        jobRows = new BatchingJobRows(this);        
    }
}

Now the idea will be when I create my jobRows the data for the table will be loaded by the BatchingJobRows object, which should hopefully then be available to my activity. I don't have a way of checking this at the mo though so I'm not sure if the concept is right (my main worry is the while loop which is adding rows to the table).

Anyway here's a simplified version of what's happening in the BatchingJobRows.

package com.producermobile.jobs;

import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

import com.producermobile.R;

public class BatchingJobRows  {

    private TableLayout table;
    private View tableView;
    private Context context;
    private HashMap<String,ArrayList<String>> jobs; 
    private ArrayList<String> jobsVals;

    public BatchingJobRows(Context context) {
        this.context = context;
        LayoutInflater inflater = (LayoutInflater) 
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        tableView = inflater.inflate(R.layout.jobs_table, null);
        table = (TableLayout) tableView.findViewById(R.id.Jobs);
        jobVals = new ArrayList<String>();
        jobVals.add("HELD");
        jobVals.add("DELL");
        jobVals.add("PRINT");
        jobVals.add("STATEMENT");
        jobs = new HashMap<String,ArrayList<String>>();
        jobs.put("012345",jobVals);
        jobs.put("123456",jobVals);
        this.setRows();
    }

    public void setRows() {
        Iterator<String> keys = jobs.keySet().iterator();
        while(keys.hasNext()) {
            //Init Objects
            TableRow row = (TableRow) TableView.findViewById(R.id.JobRow);
            TextView jobid = (TextView) tableView.findViewById(R.id.JobID);
            TextView jobstatus = (TextView) tableView.findViewById(R.id.JobStatus);
            TextView customer = (TextView) tableView.findViewById(R.id.Customer);
            TextView department = (TextView) tableView.findViewById(R.id.Department);
            TextView doctype = (TextView) tableView.findViewById(R.id.DocType);
            String key = keys.next();
            jobid.setText(key);
            jobstatus.setText(jobs.get(key).get(0));
            customer.setText(jobs.get(key).get(1));
            department.setText(jobs.get(key).get(2));
            doctype.setText(jobs.get(key).get(3));
            row.addView(jobid);
            row.addView(jobstatus);
      开发者_如何转开发      row.addView(customer);
            row.addView(department);
            row.addView(doctype);
            table.addView(row);
        }
    }
}


Well this is not a direct answer to your question but what I think you should do is create a list activity, and move this functionality down into a ListAdapter of some type. We can help you with question on how to set that up. Its probably easier than the route you are going, and more familiar to people on this board. So i would recommend taking the conventional approach on this. Use ListActivity, and ListAdapter Base or Cursor depending on your needs.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜