2017-02-21 11 views
1

많은 예제와 튜토리얼에서 gridView와 어댑터를 사용하는 방법은 Adapter에서 gridView에있는 항목의 이름 목록과 같은 일부 목록을 구현하는 경우입니다.안드로이드 어댑터에서 gridView - 버튼 목록 이름 대신 버튼 목록

Adapter에서 getView 메소드를 대체합니다. 그런 다음 gridView에서 항목을 팽창시킵니다.

공용 클래스 TileAdapter이

private Context context; 
private Tile[] tiles; 

public TileAdapter(Context context, Tile[] tiles){ 
    this.context = context; 
    this.tiles= tiles; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View gridView; 

    if(convertView == null){ 

     gridView = new View(context); 
     gridView = inflater.inflate(R.layout.layout_tile, null); 

     TextView textView = (TextView) gridView.findViewById(R.id.tile_title); 
     textView.setText(tiles[position].getTitle()); 

    }else{ 
     gridView = (View) convertView; 
    } 

    return gridView; 

} 

모든 것이 잘 작동한다 {BaseAdapter를 확장 : 다음 우리가 우리의 목록에서 [위치] 여기

을 텍스트로 텍스트를 변경하는 코드의 예입니다. 하지만 목록에서 항목을 만들어야하는 경우에는 어떻게해야합니까?

List<Button> buttons 다른 클래스에서 사용하는 버튼이있는 곳을 가정 해 보겠습니다. GridView 어댑터는이 목록에서 "MainClass"를 가져옵니다.

어댑터에서 getView()을 코딩하는 방법은이 목록에서 버튼을 항목으로 설정 하시겠습니까? 새 Button을 만들지 않고 새 Button의 레이블이 목록과 동일하지만 gridView에 넣으려는 경우이 버튼을 목록에서 가져 오는 것입니다!

그래서이 같은 게 필요합니까? 그 생각을 아십니까?

필드를 내 버튼을

@Override 

public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if(convertView == null){ 

      view= new View(context); 
      view= inflater.inflate(R.layout.field_layout, null); 

      //This is bad - but You know what i want? 
      Field field = (Field) view.findViewById(R.id.field); 
      field = fields.get(position); 

     }else{ 
      view= (View) convertView; 
     } 

     return view; 
    } 

답변

0

아무것도를 확장하지 클래스 getView()가 호출 될 때 모든 항목을 팽창 강요이다. 대신 어댑터를 만들고 반환 할 때보기 목록을 만들거나받을 수 있습니다.

그래서이의 예는 다음과 같습니다 나는 그것을 얻지 않는다

public class TileAdapter extends BaseAdapter { 

    List<View> views = new ArrayList<>(); 

    public void setViews(@NonNull List<View> views) { 
     this.views = views; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return views.size(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return views.get(i); 
    } 

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

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     return views.get(i); 
    } 
} 
+0

. 이보기는 무엇이며 목록에서이 버튼을 팽창시키는 방법은 무엇입니까? –

+0

'inflater.inflate (R.layout.field_layout, null);에서했던 것처럼 뷰를 팽창시킬 수 있습니다. 액티비티에서 뷰를 팽창시켜 어댑터 나 어댑터 생성자로 전달할 수 있습니다. 계속하기 전에이 내용을 읽어야합니다. http://www.vogella.com/tutorials/AndroidCustomViews/article.html –

+0

감사합니다. 나는 이것을 읽을 것이기 시작할 것이다. –