-1

我在使用 SimpleCursorAdapter 的行布局的布局中有两个 TextView。TextView 的值从 SimpleCursorAdapter 填充。

第一个视图显示计算机主机的名称,这很好,但第二个视图显示主机的 MAC 地址,目前在我拥有的数据库中,我将其存储为十六进制格式的字符串。

我想要做的不是在数据库中设置 mac 地址的格式,而是使用自定义 TextView 或其他可以工作的方式以编程方式对其进行格式化。因此,当 SimpleCursorAdapter 填充 TextView 扩展类时,基本上 AABBCCEEFF00 将变为 AA:BB:CC:EE:FF:00。

最好的方法是什么?如果我使用自定义 TextView,我应该在哪里插入代码?

我还看到了对 View Binding 的引用?但是不确定这是否是要走的路,我非常希望使代码模块化,而不是在可以扩展简单类时覆盖复杂代码。

4

2 回答 2

1

据我了解您的问题,您想以编程方式将 AABBCCDDEEFF 转换为 AA:BB:CC:DD:EE:FF。如果我没有收到您的问题,请告诉我。

看下面的代码,从这里,你将调用一个函数来获取格式化的 mac

String formattedMac = new String();
formattedMac=getFormattedMac("AABBCCDDEEFF");
Log.e("formatted Mac", formattedMac);//it will be look like, AA:BB:CC:DD:EE:FF

这是返回格式化的mac的函数,

    private String getFormattedMac(String mac) {
    String result = new String();
    result="";
    int start=0;
    int end=2;
    int max=mac.length()+2;

    while(end<max)
    {
        result = result+mac.substring(start, end);
        if(end<mac.length())
        {
            result = result+":";
        }
        Log.e("result", result);
        start=start+2;
        end=end+2;
    }

    return result;
}
于 2013-01-20T05:28:12.390 回答
0

事实证明,最好的方法是使用 ViewBinder 设置,最后我遵循了这个答案。

Android,使用 SimpleCursorAdapter 设置颜色而不仅仅是字符串

一旦我知道这一点,我还将列更改为 Blob 而不是 VarChar 以使其也更好一点。

    SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() {
        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            String name = cursor.getColumnName(columnIndex);
            if ("mac_address".equals(name)) {
                byte[] macAddress = cursor.getBlob(columnIndex);
                TextView textView = (TextView)view;
                textView.setText(Target.getMacAddress(macAddress));
                return true;
            }
            return false;
        }
    };
于 2013-01-20T16:49:26.363 回答