여기 내 재치가 있습니다. 나는 대화 상자를 사용하여 사용자가 양식을 채우도록하려는이 안드로이드 뷰를 작업 해왔다. 양식에는 두 개의 스피너를 사용하여 표시하려는 두 개의 목록 항목이 있습니다. 두 번째 목록의 내용은 목록 1의 선택된 항목을 기반으로 채워집니다. 두 개의 스피너 모두 항목을 선택하고 나면 재활용 자보기를 사용하여 채울 추가 필드를 표시합니다. 이 필드는 목록 2에서 선택한 항목을 기반으로 결정됩니다.사용자 지정 개체가있는 Spinner가 사용자 지정 대화 상자 내부에 있음 목록 조각이 작동하지 않습니다.
현재 가장 큰 문제점은 대화 상자에서 항목의 첫 번째 목록을 표시 할 수 없다는 것입니다. 메시지가 나타나면 대화 상자와 내부의 회 전자가 잘 렌더링됩니다. 그러나 회 전자는 항상 비어 있습니다.
여기 내 코드가 있습니다. 내 사용자 지정 대화 상자에 대한
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:textSize="14sp"
android:textColor="@android:color/black"/>
</LinearLayout>
레이아웃을 : 나는 spinner.xml 레이아웃 마크 업으로 시작합니다
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/properties_ll"
android:background="@color/translucent_green">
<Spinner
android:layout_width="120dp"
android:layout_height="40dp"
android:clickable="true"
android:id="@+id/material_types_dd"
android:spinnerMode="dropdown"/>
<Spinner
android:layout_width="120dp"
android:layout_height="40dp"
android:clickable="true"
android:id="@+id/materials_dd"
android:spinnerMode="dropdown"/>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/material_detials_rv"/>
</LinearLayout>
사용자 정의 대화 클래스 (발리를 사용하여 모든 HTTP 호출이 노력하고 있습니다 철저하게 테스트되었습니다, 그래서 문제가)가 아니라는 것을 알고 :
public class TacDetailsDialogFragment extends DialogFragment {
private static final String TAG = TacDetailsDialogFragment.class.getSimpleName();
@BindView(R.id.properties_ll)
LinearLayout properties;
@BindView(R.id.material_types_dd)
Spinner materialtypesDD;
@BindView(R.id.materials_dd)
Spinner materialsdd;
@BindView(R.id.material_detials_rv)
RecyclerView materialDetailsRecycler;
private List<BaseModel> materials;
private List<BaseModel> materialTypes;
private BaseModel selectedMaterial;
private BaseModel selectedMaterialType;
private List<BaseModel> selectedMaterialFields;
private List<List<BaseModel>> selectedMaterialFieldUnits;
ProgressBarHelper progressBarHelper;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.tac_details_dialog, null))
.setPositiveButton(
R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}
)
.setNegativeButton(
"Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
TacDetailsDialogFragment.this.getDialog().cancel();
}
}
);
View view = inflater.inflate(R.layout.tac_details_dialog, null);
ButterKnife.bind(this, view);
progressBarHelper = new ProgressBarHelper(this.getActivity());
getMaterialTypes();
materialtypesDD.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d(TAG, materialTypes.get(position).toString());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
// materialsdd.setOnItemSelectedListener(new ClickToSelectEditText.OnItemSelectedListener() {
// @Override
// public void onItemSelectedListener(Object item, int selectedIndex) {
// getMaterialFields();
// }
// });
return builder.create();
}
/* The activity that creates an instance of this dialog must implement
* this interface in order to receive event callbacks. Each method
* passes the dialogfrag in case the host needs to query it */
public interface TacDetailsDialogListener {
public void onDialogPositiveClick(DialogFragment dialog);
}
TacDetailsDialogListener mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
try{
mListener = (TacDetailsDialogListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement TacDetailsDialogListener");
}
}
private void initMaterialTypesDD() {
materialtypesDD.setAdapter(new ArrayAdapter<BaseModel>(getContext(), R.layout.spinner, materialTypes) {
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getDropDownView(position, convertView, parent);
// TextView text = (TextView) view.findViewById(R.id.text1);
// text.setVisibility(View.VISIBLE);
// text.setTextColor(Color.BLACK);
return view;
}
});
}
private void initMaterialsDD() {
materialsdd.setAdapter(new ArrayAdapter<>(getContext(), R.layout.support_simple_spinner_dropdown_item, materials));
}
private void initMaterialFields() {
materialDetailsRecycler.setLayoutManager(new LinearLayoutManager(this.getContext(), LinearLayoutManager.VERTICAL, false));
materialDetailsRecycler.setAdapter(new MaterialDetailRecyclerViewAdapter(selectedMaterialFields, selectedMaterialFieldUnits));
}
private void initMaterialTypes(JSONArray data) throws JSONException {
materialTypes = new ArrayList<BaseModel>();
for (int i = 0; i < data.length(); i++) {
materialTypes.add(new BaseModel(data.getJSONObject(i)));
}
}
public void initMaterials(JSONArray data) throws JSONException {
materials = new ArrayList<BaseModel>();
for (int i = 0; i < data.length(); i++) {
materials.add(new BaseModel(data.getJSONObject(i)));
}
}
public void initSelectedMaterialFields(JSONArray data) throws JSONException {
selectedMaterialFields = new ArrayList<BaseModel>();
selectedMaterialFieldUnits = new ArrayList<List<BaseModel>>();
for (int i = 0; i < data.length(); i++) {
JSONObject field = data.getJSONObject(i);
selectedMaterialFields.add(new BaseModel(field));
JSONArray fieldUnits = field.getJSONArray("units");
List<BaseModel> units = new ArrayList<>();
for (int j = 0; j < fieldUnits.length(); j++) {
units.add(new BaseModel(fieldUnits.getJSONObject(j)));
}
selectedMaterialFieldUnits.add(units);
}
}
private void getMaterialTypes() {
VolleySingleton.getInstance(this.getContext()).addToRequestQueue(
new JsonObjectRequest(
Request.Method.GET,
getString(R.string.server_ip) + getString(R.string.materialtypes),
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
if (response.getInt("code") == 200) {
initMaterialTypes(response.getJSONArray("data"));
initMaterialTypesDD();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}
)
);
}
private void getMaterials() {
VolleySingleton.getInstance(this.getContext()).addToRequestQueue(
new JsonObjectRequest(
Request.Method.GET,
getActivity().getString(R.string.server_ip) + getActivity().getString(R.string.materials) + selectedMaterialType.getId(),
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
if (response.getInt("code") == 200) {
JSONArray data = response.getJSONArray("data");
initMaterials(data);
initMaterialsDD();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
)
);
}
private void getMaterialFields() {
VolleySingleton.getInstance(this.getContext()).addToRequestQueue(
new JsonObjectRequest(
Request.Method.GET,
getString(R.string.server_ip) + getString(R.string.materialfields) + selectedMaterial.getId(),
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
if (response.getInt("code") == 200) {
initSelectedMaterialFields(response.getJSONArray("data"));
initMaterialFields();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
)
);
}
}
사용자 정의 개체, BASEMODEL :
RecyclerView 비트 그래서이 이미 코드 복잡 질문을 포함한 관련이없는 경우public void makeTacDetailsAlert() {
dialog = new TacDetailsDialogFragment();
dialog.show(this.getSupportFragmentManager(), "TacDetailsDialogFragment");
}
IDK :
는 그리고 이것은 내가 주요 활동에서 대화 상자를 호출하는 방법입니다.
당신에게, S/O 신.
흰색으로 스피너 레이아웃 textview 색상이 설정되어있어 문제가 없는지 확인하십시오. 검정색으로 변경 한 다음 시도하십시오. – Munir
@ 문경 그 점을 지적 해 주셔서 감사합니다. 그것을 검은 색으로 바꿨지 만 실제로 차이를 만들지는 않았다. 문제는 어댑터가 설정되지 않는다고 생각합니다. 그러나 디버깅 할 때 코드의 일부가 원활하게 실행됩니다. – wanderingProgrammer