developer tip

SpinnerAdapter에서 getView와 getDropDownView의 차이점

copycodes 2020. 12. 4. 19:15
반응형

SpinnerAdapter에서 getView와 getDropDownView의 차이점


SpinnerAdapter를 구현하면 getDropDownView를 얻 습니다 . getView확장해야 할 때 가지고있는 것과 어떻게 다른 가요BaseAdapter ?


다음 코드를 보면 getView와 getDropDownView에 이름과 값 배열이 있습니다.

private void initView() {
    SpinnerDropDownAdapter sddadapter = new SpinnerDropDownAdapter(this);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, sddadapter.name);

    Spinner getViewSP = (Spinner) findViewById(R.id.getview_sp);
    getViewSP.setAdapter(adapter);

    Spinner getViewWDropDownSP = (Spinner) findViewById(R.id.getview_w_drop_down_sp);
    getViewWDropDownSP.setAdapter(sddadapter);
}

static class SpinnerDropDownAdapter extends BaseAdapter implements
        SpinnerAdapter {
    Context context;

    SpinnerDropDownAdapter(Context ctx) {
        context = ctx;
    }

    String[] name = { " One", " Two", " Three", " Four", " Five", " Six",
            " Seven", " Eight" };
    String[] value = { " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8" };

    @Override
    public int getCount() {
        return name.length;
    }

    @Override
    public String getItem(int pos) {
        // TODO Auto-generated method stub
        return name[pos];
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView text = new TextView(context);
        text.setTextColor(Color.BLACK);
        text.setText(name[position]);
        return text;
    }

    @Override
    public View getDropDownView(int position, View convertView,
            ViewGroup parent) {
        TextView text = new TextView(context);
        text.setTextColor(Color.BLACK);
        text.setText(value[position]);
        return text;
    }
}

getDropDownView 메서드가 구현되지 않은 경우 드롭 다운 팝업이 getView에서 뷰를 가져옵니다. 따라서 이름 만 표시됩니다.

getView

getView와 getDropDownView가 모두 구현되면 전자는 이름 을 얻고 후자는 value 를 얻습니다. 나머지 스피너는 getview에서 이름 을 얻고 드롭 다운 팝업은 value 를 얻습니다 .getView 및 getDropDownView


받아 들여지는 대답은 약간 복잡해 보입니다.

  • getView -사용자가 스피너를 누르기 전에 스피너에 표시되는 값으로, 각 값보기는 convertView 매개 변수로 조정할 수 있습니다.

  • getDropDownView -사용자가 스피너를 누른 후 사용자가 선택할 수있는 값 목록으로, 목록의 각 값은 convertView 매개 변수로 조정될 수 있습니다.


getViewgetDropDownView다른 레이아웃을 표시 할 수 있습니다.

Spinner를 만들고 class ImageTextAdapter extends ArrayAdapter<String>어댑터로 사용 합니다. 및을 getView모두 표시 할 수 있도록 재정의 합니다. 그러나 .ImageViewTextViewgetDropDownView

스피너를 누르기 전의 스크린 샷입니다.

여기에 이미지 설명 입력

스피너를 누른 후

여기에 이미지 설명 입력

다음 코드로 스피너를 초기화합니다.

String[] spinnerTexts = {"Tanzania", "Thailand"};
int[] spinnerImages = {R.drawable.tanzania, R.drawable.thailand};

ArrayAdapter<String> adapter = new ImageTextAdapter(this, spinnerTexts, spinnerImages);

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);

다음은 ImageTextAdapter.java입니다.

public class ImageTextAdapter extends ArrayAdapter<String> {

    int[] images;

    public ImageTextAdapter(Context ctx, String[] texts, int[] images) {
        super(ctx, android.R.layout.simple_spinner_item, texts);
        this.images = images;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = getLayoutInflater().inflate(R.layout.row, parent, false);

        TextView textView = (TextView) row.findViewById(R.id.textView);
        textView.setText(getItem(position));

        ImageView imageView = (ImageView) row.findViewById(R.id.imageView);
        imageView.setImageResource(images[position]);

        return row;
    }
}

SpinnerAdapter를 다음과 같이 사용할 수 있습니다.

public class FolderSpinnerAdpater extends BaseAdapter implements SpinnerAdapter {
@Override
public int getCount() {
    return 0;
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    return null;
}
}

BaseAdapter.java에서

public View getDropDownView(int position, View convertView, ViewGroup parent) {
    return getView(position, convertView, parent);
}

무시 getView()하고 getDropDownView()다른보기를 반환하면 차이점을 찾을 수 있습니다.

여기에 이미지 설명 입력

참고 URL : https://stackoverflow.com/questions/13433874/difference-between-getview-getdropdownview-in-spinneradapter

반응형