Android 如何在片段内以编程方式使用xml布局创建视图?
我有一些布局,我需要创建许多视图,以将tham添加到片段内部的gridLayout中 我现在有:Android 如何在片段内以编程方式使用xml布局创建视图?,android,android-layout,android-fragments,viewgroup,Android,Android Layout,Android Fragments,Viewgroup,我有一些布局,我需要创建许多视图,以将tham添加到片段内部的gridLayout中 我现在有: ArrayList<Tables> tables; ArrayList<View> tableList = new ArrayList<>(); tables = parsedArray.get(0).getTables(); GridLayout gridLayout = (GridLayo
ArrayList<Tables> tables;
ArrayList<View> tableList = new ArrayList<>();
tables = parsedArray.get(0).getTables();
GridLayout gridLayout = (GridLayout) getView().findViewById(R.id.grid_layout);
for (int i = 0; i < tables.size(); i++) {
tableList.add(getView().findViewById(R.id.table_layout));
//TextView textView = (TextView) tableList.get(i).findViewById(R.id.table_number);
//textView.setText(tables.get(i).getTableNumber());
GridLayout.Spec row = GridLayout.spec(i / 5);
GridLayout.Spec col = GridLayout.spec(i);
GridLayout.LayoutParams params = new GridLayout.LayoutParams(row, col);
gridLayout.addView(tableList.get(i), i, params);
}
}
片段代码:
public static class tablesFragment extends Fragment {
private VolleySinglton volleySinglton;
private RequestQueue requestQueue;
public static tablesFragment getInstance(int position) {
tablesFragment myTablesFragment = new tablesFragment();
Bundle args = new Bundle();
args.putInt("position", position);
myTablesFragment.setArguments(args);
return myTablesFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_1, container, false);
GridLayout gridLayout = (GridLayout) layout.findViewById(R.id.grid_layout);
volleySinglton = VolleySinglton.returnInstance();
requestQueue = volleySinglton.getRequestQueue();
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
url,
(String) null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
ArrayList<RoomsClass> parsedArray = parseRoomsResponse(response);
updateViews(parsedArray);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError) {
}
}
});
requestQueue.add(jsonObjectRequest);
return layout;
}
private void updateViews(ArrayList<RoomsClass> parsedArray) {
// Extract relevant data from the array
if (parsedArray == null || parsedArray.isEmpty()) {
} else {
ArrayList<Tables> tables;
ArrayList<View> tableList = new ArrayList<>();
tables = parsedArray.get(0).getTables();
GridLayout gridLayout = (GridLayout) getView().findViewById(R.id.grid_layout);
for (int i = 0; i < tables.size(); i++) {
tableList.add(getView().findViewById(R.id.table_layout));
//TextView textView = (TextView) tableList.get(i).findViewById(R.id.table_number);
//textView.setText(tables.get(i).getTableNumber());
GridLayout.Spec row = GridLayout.spec(i / 5);
GridLayout.Spec col = GridLayout.spec(i);
GridLayout.LayoutParams params = new GridLayout.LayoutParams(row, col);
gridLayout.addView(tableList.get(i), i, params);
}
}
// Replace the place holders in the relevant views
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
}
public interface VolleyCallback {
void onSuccess(ArrayList<RoomsClass> result);
}
private ArrayList<RoomsClass> parseRoomsResponse(JSONObject response) {
ArrayList<RoomsClass> roomsArray = new ArrayList<>();
try {
JSONArray rooms = response.getJSONArray("rooms");
for (int i = 0; i < rooms.length(); i++) {
JSONObject currentRoom = rooms.getJSONObject(i);
RoomsClass room = new RoomsClass();
room.setRoomId(currentRoom.getInt("room_id"));
room.setRoomLabel(currentRoom.getString("label"));
JSONArray tables = currentRoom.getJSONArray("tables");
for (int j = 0; j < tables.length(); j++) {
JSONObject currentTable = tables.getJSONObject(j);
room.addTable(currentTable.getInt("table_id"), currentTable.getInt("table_number"));
}
roomsArray.add(room);
}
} catch (JSONException e) {
Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show();
}
return roomsArray;
}
}
当我尝试添加视图时,一切正常
附言。
我还没有结束这个问题,可能有一些麻烦。给我看看你添加到qestion中的所有片段编解码器。。。而且它看起来很糟糕(
findviewbyd()
for循环内部可能返回null
,这可能意味着布局中还没有具有该ID的视图。但是如果它没有返回null,那么如果i
大于1,您将遇到问题,因为它每次都会找到相同的视图并尝试添加该视图,但第二个add with会抛出异常since它已经被添加了。那么我如何添加一个不总是相同的新视图呢?
public static class tablesFragment extends Fragment {
private VolleySinglton volleySinglton;
private RequestQueue requestQueue;
public static tablesFragment getInstance(int position) {
tablesFragment myTablesFragment = new tablesFragment();
Bundle args = new Bundle();
args.putInt("position", position);
myTablesFragment.setArguments(args);
return myTablesFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_1, container, false);
GridLayout gridLayout = (GridLayout) layout.findViewById(R.id.grid_layout);
volleySinglton = VolleySinglton.returnInstance();
requestQueue = volleySinglton.getRequestQueue();
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
url,
(String) null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
ArrayList<RoomsClass> parsedArray = parseRoomsResponse(response);
updateViews(parsedArray);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError) {
}
}
});
requestQueue.add(jsonObjectRequest);
return layout;
}
private void updateViews(ArrayList<RoomsClass> parsedArray) {
// Extract relevant data from the array
if (parsedArray == null || parsedArray.isEmpty()) {
} else {
ArrayList<Tables> tables;
ArrayList<View> tableList = new ArrayList<>();
tables = parsedArray.get(0).getTables();
GridLayout gridLayout = (GridLayout) getView().findViewById(R.id.grid_layout);
for (int i = 0; i < tables.size(); i++) {
tableList.add(getView().findViewById(R.id.table_layout));
//TextView textView = (TextView) tableList.get(i).findViewById(R.id.table_number);
//textView.setText(tables.get(i).getTableNumber());
GridLayout.Spec row = GridLayout.spec(i / 5);
GridLayout.Spec col = GridLayout.spec(i);
GridLayout.LayoutParams params = new GridLayout.LayoutParams(row, col);
gridLayout.addView(tableList.get(i), i, params);
}
}
// Replace the place holders in the relevant views
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
}
public interface VolleyCallback {
void onSuccess(ArrayList<RoomsClass> result);
}
private ArrayList<RoomsClass> parseRoomsResponse(JSONObject response) {
ArrayList<RoomsClass> roomsArray = new ArrayList<>();
try {
JSONArray rooms = response.getJSONArray("rooms");
for (int i = 0; i < rooms.length(); i++) {
JSONObject currentRoom = rooms.getJSONObject(i);
RoomsClass room = new RoomsClass();
room.setRoomId(currentRoom.getInt("room_id"));
room.setRoomLabel(currentRoom.getString("label"));
JSONArray tables = currentRoom.getJSONArray("tables");
for (int j = 0; j < tables.length(); j++) {
JSONObject currentTable = tables.getJSONObject(j);
room.addTable(currentTable.getInt("table_id"), currentTable.getInt("table_number"));
}
roomsArray.add(room);
}
} catch (JSONException e) {
Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show();
}
return roomsArray;
}
}
View view = getActivity().getLayoutInflater().inflate(R.layout.table_layout, gridLayout, false);
tableList.add(view);