如何将适配器设置为列表中的自定义旋转器



我有一个列表范围的列表,其中包含复杂布局作为项目,这些项目包含自定义旋转器(材料spinner(

    MaterialSpinner chooseSubjectSpinner = adapter.getItem(position).findViewById(R.id.myCustomSpinner);
    chooseSubjectSpinner.setAdapter(spinnerAdapter);

我尝试了getChildAt(position)adapter.getItem(postition)adapter.getView(position, null, parent)list.get(position)的添加前缀.findViewById(R.id.myview),但它不起作用。(它要么在运行时返回NullPointerException,要么根本不做任何事情!(

编辑:

如果你们想要整个片段代码:

private ArrayList<View> listViews = new ArrayList<>();
private ViewAdapter adapter;
private List<String> spinnerItems = new ArrayList<>();
private MaterialSpinnerAdapter<String> spinnerAdapter;
public FragmentUnitTest() {
    // Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_unit_test, container, false);
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState){
    spinnerItems.add("Hey!");
    spinnerItems.add("Hello!");
    spinnerItems.add("Hi!");
    spinnerAdapter = new MaterialSpinnerAdapter<>(getContext(), spinnerItems);
    adapter = new ViewAdapter(listViews, view.getContext());
    setListAdapter(adapter);
    addView(R.layout.cardview_with_spinner);
    MaterialSpinner spinner = adapter.getItem(0).findViewById(R.id.custom_spinner);
    RLogger.e("FragmentUnitTest", spinner);
    spinner.setAdapter(spinnerAdapter);
    getListView().setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Toast.makeText(getActivity(), "Clicked: " + position + " .", Toast.LENGTH_SHORT).show();
}

创建这样的自定义旋转器:

公共类PtcustomSpinner扩展了ArrayAdapter {

public PTCustomSpinner(Context context, int textViewResourceId) {
    super(context, textViewResourceId);
    // TODO Auto-generated constructor stub
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    int count = super.getCount();
    return count>0 ? count-1 : count ;

}

像下面的//下方xml布局一样处理它,仅包含带有id" temp"

的文本视图
 PTCustomSpinner spinnerArrayAdapter = new PTCustomSpinner(PTExceptionMainPage.this, R.layout.xml_with_only_textview);
    spinnerArrayAdapter.addAll(team_array);
    spinnerArrayAdapter.add("Pick Team");
    spinnerTeam.setAdapter(spinnerArrayAdapter);
    spinnerTeam.setSelection(spinnerArrayAdapter.getCount());
    spinnerTeam.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            if (spinnerTeam.getSelectedItem() != "Pick Team") {
                teamIdSelected = apiResponseTeam.get(i).getTeamID();
            }
            else if( spinnerTeam.getSelectedItem().equals("Pick Team"))
            {
                View v = spinnerTeam.getSelectedView();
                ((TextView) v).setTextColor(getResources().getColor(R.color.ash));
            }
        }
        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
        }
    });

最新更新