1 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
您應(yīng)該創(chuàng)建一個(gè)ArrayList如下所示的。
ArrayList<String> spinnerArray = new ArrayList<String>();
Spinner 與 Spinner 相關(guān)聯(lián)Adapter view,因此要在 Spinner 中填充數(shù)據(jù),您需要使用adapter. Anadapter是UI組件和數(shù)據(jù)源之間的橋梁,幫助我們向UI組件填充數(shù)據(jù)。
只需您可以像下面一樣使用ArrayAdapter(要使用自定義適配器,請(qǐng)參閱此)
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>
(this, android.R.layout.simple_spinner_item,
spinnerArray);
之后,您必須將您的設(shè)置設(shè)置adapter為spinner如下所示。
spin.setAdapter(spinnerArrayAdapter);
示例:您的代碼應(yīng)如下所示。
ArrayList<String> spinnerArray;
ArrayAdapter<String> spinnerArrayAdapter
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popup);
WayPointData = new SubscribedData<>();
final Type WayPointType = new TypeToken<SubscribedData<WayPoint>>() {
}.getType();
// spinner element
spin = (Spinner) findViewById(R.id.spinner);
spinnerArray = new ArrayList<String>();
spinnerArrayAdapter = new ArrayAdapter<String>
(this, android.R.layout.simple_spinner_item,
spinnerArray);
spin.setAdapter(spinnerArrayAdapter);
rosbridge = new RosbridgeListener("ws://10.24.204.231:9090");
rosbridge.setOnDataReceivedListener(new RosbridgeMessageListener() {
/**
* a running thread that when the connection is made the data of the topic will serialize and deserialized java objects
* to (and from) JSON.
* @param msg
*/
@Override
public void onDataReceived(final String msg) {
try {
runOnUiThread( new Runnable() {
@Override
public void run() {
try {
WayPointData = new Gson().fromJson(msg,WayPointType);
// modify below lines like
JSONObject mainObject = new JSONObject(msg); // add msg in JSONObject parameter
JSONObject msgObject = mainObject.getJSONObject("msg"); // get msgObject from main object
JSONArray wayPointJsonArray = msgObject.getJSONArray("waypoints"); // get wayPointJsonAarry from msg object
for (int i = 0; i < wayPointJsonArray.length(); i++) {
JSONObject wayPointJsonObject = wayPointJsonArray.getJSONObject(i);
// Parse name
String name = wayPointJsonObject.getString("name");
WayPoint wayPoint = new WayPoint();
wayPoint.name = name;
// here you have to add name to your spinner array
spinnerArray.add(name)
}
// After all your data added to arraylist you should notify adapter that data set changed
spinnerArrayAdapter.notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
}
});
/** a msg that will display once the data is received **/
Log.d("B9T", String.format("Received data: %s", msg));
} catch (Exception e) {
e.printStackTrace();
}
}
});
spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int p, long id) {
WayPoint wayPoint = (WayPoint) parent.getItemAtPosition(p);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
/** a set of the waypoints popup window **/
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
getWindow().setLayout((int) (width * .6), (int) (height * .6));
}
}
添加回答
舉報(bào)