繁体   English   中英

服务中的Google Glass LiveCard更新列表视图

[英]Google Glass LiveCard update listview from Service

我有一个Google Glass LiveCard应用程序,其中后台服务从远程URL提取数据。

我在LiveCard活动中添加了TextView和ListView:

<TextView
        android:id="@+id/home_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:text="@string/hello_world" />
    <ListView
        android:id="@+id/order_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </ListView>

我无法像处理TextView一样从Service刷新ListView数据。 对于TextView,我使用以下方法:

remoteView.setTextViewText(R.id.home_text, "Hello world !");

在Activity onCreate方法中,我将适配器设置如下:

   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);  

      String[] OrdersArray = new String[];
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.order_list, android.R.id.text1, OrdersArray);
   }

有什么建议吗? 提前致谢。

您可以在传感器管理器的帮助下实现头部可滚动列表视图。 它计算您的头部倾斜的角度,并同样滚动列表视图。 在玻璃应用程序中,这比使用按钮甚至语音命令更为方便。

这是该代码段:

public class MainActivity extends Activity implements SensorEventListener {

private SensorManager mSensorManager;
private Sensor mOrientation;

ListView listView ;
ArrayAdapter<String> adapter;

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

    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_GAME);

    // Get ListView object from xml
    listView = (ListView) findViewById(R.id.list);

    // Defined Array values to show in ListView
    String[] values = new String[] { "Glass App list View", 
            "Using Adapter to inflate",
            "Basic Coding example",
            "How was your day", 
            "I love coding in Android", 
            "List Views all over the place", 
            "Services to fetch the data", 
            "And bind up in a list view" 
    };



    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);

    // Assign adapter to ListView
    listView.setAdapter(adapter); 
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}

@Override
public void onSensorChanged(SensorEvent event) {
    /* *** need only pitch angle (head bouncing backwards and forward)*** */
    float pitch_angle = event.values[1];

    /* *** first interval head angle degrees *** */
    int top_head_angle_limit = -110;
    int bot_head_angle_limit = -70;

    /* *** second interval *** */
    int top_list_item_limit = 0;
    int bot_list_item_limit = adapter.getCount();

    /* *** linear mapping/ map interval [-110,-70](head angle degrees) -> [0, 8] list items *** */
    /* *** linear mapping formula: (val - A)*(b-a)/(B-A) + a *** */
    if(pitch_angle >= top_head_angle_limit && pitch_angle <= bot_head_angle_limit){
        int selection = (int) ((pitch_angle - top_head_angle_limit)*(bot_list_item_limit - top_list_item_limit)/(bot_head_angle_limit - top_head_angle_limit) + top_list_item_limit);
        Log.e("selection: ", String.valueOf(selection));
        listView.setSelection(selection);
    }
}

有关更详细的代码实现,请参阅此Google Glass应用程序代码。

对于列表视图: https : //github.com/pscholl/glass_snippets/blob/master/lib/src/main/java/de/tud/ess/HeadListView.java

对于滚动视图: https : //github.com/pscholl/glass_snippets/blob/master/lib/src/main/java/de/tud/ess/HeadScrollView.java

希望这会有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM