【问题标题】:Best way you can format a string in an Android TextView that is populated by SimpleCursorAdapter在由 SimpleCursorAdapter 填充的 Android TextView 中格式化字符串的最佳方式
【发布时间】:2013-01-20 04:30:28
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: android android-layout textview format-string


    【解决方案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;
    }
    

    【讨论】:

    • 这没有回答问题。问题是如何在适配器中格式化字符串,适配器从数据库中获取游标,而不是如何执行实际格式化。
    • @MichaelHerbig:在我的回答中,我从“据我所知你的问题,如果我没有得到你的问题,请告诉我”开始。我认为他最终想要格式化字符串,我提供了解决方案。即使你正在使用那段代码。而且你正在投票。我很惊讶!!
    • 拒绝投票是一种防止不良、次优或不正确的解决方案被注意到的方法。我已经删除了有问题的引用。
    • @MichaelHerbig:然后请从您的代码中删除我的功能,然后让您的答案完整,正确的解决方案。
    • 是的,对不起,我明白为什么我的问题令人困惑,这就是我自己没有找到解决方案的原因,因为很难找到合适的术语来寻找。 MichaelHerbig 在我想做的事情上是正确的。我已经知道如何格式化字符串,我想知道的是如何在 SimpleCursorAdapter 使用字符串填充 TextView 之间创建中间件类型的函数,以便正确格式化。
    【解决方案2】:

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

    Android, using SimpleCursorAdapter to set colour not just strings

    一旦我知道这一点,我还将列更改为 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;
            }
        };
    

    【讨论】:

      猜你喜欢
      • 2012-07-09
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2017-06-26
      • 2022-11-18
      • 2014-08-24
      • 2010-10-25
      相关资源
      最近更新 更多