【问题标题】:Display Checkbox field from MySQL in Android在 Android 中显示来自 MySQL 的复选框字段
【发布时间】:2015-06-17 22:17:26
【问题描述】:

我有一个 MySQL 数据库,其中有一些在 mysql 中设置为 TINYINT(1) 的是/否字段。我正在将该表中的信息显示到 android 上的表布局中。我如何让这些字段在 android 中显示为复选框,因为这些字段中的值是 0 表示否,除了 0 表示是?或者有没有更好的方法通过更改mysql中的字段类型来做到这一点?

这是我的 MainActivity.java,如果你想看的话。它目前只显示表格中的 3 个文本字段。

public class MainActivity extends Activity {
 String data = "";
 TableLayout tl;
 TableRow tr;
 TextView label;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tl = (TableLayout) findViewById(R.id.maintable);

    final GetDataFromDB getdb = new GetDataFromDB();
    new Thread(new Runnable() {
        public void run() {
            data = getdb.getDataFromDB();
            System.out.println(data);

            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    ArrayList<Users> users = parseJSON(data);
                    addData(users);
                }
            });

        }
    }).start();
}

public ArrayList<Users> parseJSON(String result) {
    ArrayList<Users> Suppliers = new ArrayList<Users>();
    try {
        JSONArray jArray = new JSONArray(result);
        for (int i = 0; i < jArray.length(); i++) {
            JSONObject json_data = jArray.getJSONObject(i);
            Users user = new Users();
     //       user.setId(json_data.getInt("id"));
            user.setDelivery_date(json_data.getString("Delivery_Date"));
            user.setOrder(json_data.getString("Order"));
            user.setHauler(json_data.getString("Haulers_HaulerID"));
            Suppliers.add(user);
        }
    } catch (JSONException e) {
        Log.e("log_tag", "Error parsing data " + e.toString());
    }
    return Suppliers;
}

void addHeader(){
    /** Create a TableRow dynamically **/
    tr = new TableRow(this);

    /** Creating a TextView to add to the row **/
    label = new TextView(this);
    label.setText("Delivery Date");
    label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    label.setPadding(5, 5, 5, 5);
    label.setBackgroundColor(Color.RED);
    LinearLayout Ll = new LinearLayout(this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(5, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    Ll.addView(label,params);
    tr.addView((View)Ll); // Adding textView to tablerow.

    TextView supplier = new TextView(this);
    supplier.setText("Order");
    supplier.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    supplier.setPadding(5, 5, 5, 5);
    supplier.setBackgroundColor(Color.RED);
    Ll = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    Ll.addView(supplier,params);
    tr.addView((View)Ll); // Adding textview to tablerow.

    TextView hauler = new TextView(this);
    hauler.setText("Hauler");
    hauler.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    hauler.setPadding(5, 5, 5, 5);
    hauler.setBackgroundColor(Color.RED);
    Ll = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    Ll.addView(hauler,params);
    tr.addView((View)Ll); // Adding textview to tablerow.

    // Add the TableRow to the TableLayout
    tl.addView(tr, new TableLayout.LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
}

@SuppressWarnings({ "rawtypes" })
public void addData(ArrayList<Users> users) {

    addHeader();

    for (Iterator i = users.iterator(); i.hasNext();) {

        Users p = (Users) i.next();

        /** Create a TableRow dynamically **/
        tr = new TableRow(this);

        /** Creating a TextView to add to the row **/
        label = new TextView(this);
        label.setText(p.getDelivery_date());
      //  label.setId(p.getId());
        label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        label.setPadding(5, 5, 5, 5);
        label.setBackgroundColor(Color.GRAY);
        LinearLayout Ll = new LinearLayout(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(5, 2, 2, 2);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(label,params);
        tr.addView((View)Ll); // Adding textView to tablerow.

        /** Creating Qty Button **/
        TextView supplier = new TextView(this);
        supplier.setText(p.getOrder());
        supplier.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        supplier.setPadding(5, 5, 5, 5);
        supplier.setBackgroundColor(Color.GRAY);
        Ll = new LinearLayout(this);
        params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 2, 2, 2);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(supplier,params);
        tr.addView((View)Ll); // Adding textview to tablerow.

        /** Creating Qty Button **/
        TextView hauler = new TextView(this);
        hauler.setText(p.getHauler());
        hauler.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        hauler.setPadding(5, 5, 5, 5);
        hauler.setBackgroundColor(Color.GRAY);
        Ll = new LinearLayout(this);
        params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 2, 2, 2);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(hauler,params);
        tr.addView((View)Ll); // Adding textview to tablerow.

        // Add the TableRow to the TableLayout
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
    }
}
}

任何建议表示赞赏。

【问题讨论】:

    标签: php android mysql android-activity android-tablelayout


    【解决方案1】:

    你有一个Users 数据对象,所以我认为你应该在用户对象中有一个布尔属性,在解析时将 JSON 整数转换为布尔值,并使用布尔值来设置复选框:

    class Users {
    
        .
        .
        .
        private boolean mFlag;
    
        public boolean isFlag() {
            return mFlag;
        }
    
        public void setFlag(boolean flag) {
            mFlag = flag;
        }
    
        .
        .
        .
    }
    

    解析:

     user.setFlag(json_data.getInt("Flag") != 0);
    

    显示:

    CheckBox cbFlag = new CheckBox(activity);
    
    cbFlag.setChecked(user.isFlag());
    

    【讨论】:

    • 太棒了,它有效!谢谢你。有没有办法在这个屏幕上锁定复选框不被编辑。我的下一个任务是添加活动以添加和编辑此表,但此屏幕仅用于显示信息。我担心有人可能会选中“已下订单:是/否”复选框,并认为它会更新到表中,然后其他人看到它尚未放置并订购另一个负载。
    • cbFlag.setClickable(false);
    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2012-12-31
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多