Если вам нужно menu
для обновления webview
внутри определенного Fragment
, вы можете использовать:
Фрагмент :
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Add your menu entries here
inflater.inflate(R.menu.menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.exit:
System.exit(1);
break;
case R.id.refresh:
webView.reload();
break;
}
return true;
}
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/exit" android:title="Exit" android:icon="@drawable/ic_action_cancel" />
<item android:id="@+id/refresh" android:title="Refresh" android:icon="@drawable/ic_action_refresh" />
</menu>
Вы были на правильном пути, вы просто забыли указать источнику данных, чтобы он отправлял данные в базу данных. Предполагая, что вы используете LocalDataSource
и хотите заменить данные в таблице тем, что находится в источнике данных, после замены liveata вы просто выполняете
dataTable.getDataSource().sendRequest(null,
{success: dataTable.onDataReturnInitializeTable},
dataTable);
. Также см. Другие методы onDataReturnXXX
DataTable
в справочнике API. Вы можете добавить новые данные вместо замены и т. Д.
Как я могу обновить источник данных без необходимости полностью воссоздавать таблицу?
Вы имеете в виду без использования «нового» оператора? Если так, мне не приходилось делать это самому, но я часто использую YUI. Я заметил, что есть метод deleteRows, который вы можете использовать для удаления всех строк, от 0 до длины таблицы, а затем использовать addRows, который принимает литеральный массив, такой как ваш, и индекс, 0, в этом случае.
Вы пробовали это?
Изменить: Взгляните на этот пример . То, что вы хотите сделать, определенно можно сделать. Таблица обновляется локально с заданным интервалом с использованием метода setInterval (неудивительно). Взглянув на то, что делает setInterval, вы увидите, что он вызывает makeConnection в экземпляре источника данных. Метод звучит так, как будто он делает удаленный вызов, но это не обязательно.
Давайте взглянем на пару строк из примера.
// Set up polling
var myCallback = {
success: myDataTable.onDataReturnInitializeTable,
failure: function() {
YAHOO.log("Polling failure", "error");
},
scope: myDataTable
}
myDataSource.setInterval(5000, null, myCallback)
последняя строка может вызываться один раз (или по требованию, если вам нужно) вместо интервала, переписав ее следующим образом:
myDataSource.makeConnection(null, myCallBack)
, который вызывает метод onDataReturnInitializeTable , который, я думаю, вы могли бы вызвать напрямую, что будет иметь больше смысла.
В любом случае, просто следуйте примеру и выньте части, которые вам не нужны. В конечном итоге похоже, что метод onDataReturnInitializeTable является ключевым.
Надеюсь, что это поможет.
myDataSource.makeConnection(null, myCallBack)
, который вызывает метод onDataReturnInitializeTable , который, я думаю, вы могли бы вызвать напрямую, что имело бы больший смысл.
В любом случае, просто следуйте примеру и выньте части, которые вам не нужны. В конечном итоге похоже, что метод onDataReturnInitializeTable является ключевым.
Надеюсь, что это поможет.
myDataSource.makeConnection(null, myCallBack)
, который вызывает метод onDataReturnInitializeTable , который, я думаю, вы могли бы вызвать напрямую, что имело бы больший смысл.
В любом случае, просто следуйте примеру и выньте части, которые вам не нужны. В конечном итоге похоже, что метод onDataReturnInitializeTable является ключевым.
Надеюсь, что это поможет.
Я просто хотел добавить, что вы можете сохранить разбиение на страницы, если передать вызов getState () в свойстве аргумента.
dataTable.getDataSource().sendRequest(null,
{
success: dataTable.onDataReturnInitializeTable,
argument: dataTable.getState()
}
);