2013-12-18 2 views
3

이 Google Now 카드 인터페이스를 복제하려고합니다. 나는 카드의 느낌에 대해 걱정하지 않지만보기가 어떻게 구성되는지에 더 관심이 있습니다.행에 따라 다른 유형의 어댑터가있는보기 만들기

Google Now Cards

나는 행에 해당하는 다른 레이아웃을 반환하는 어댑터를 사용하여 생각했다. 하지만 두보기 모두 서로 관련이없는 정보를 포함하고 있습니다.

다른 행 어댑터로 ListView를 가질 수 있습니까?

또는 어떻게 사용자 정의보기를 사용하여이 작업을 수행 할 수 있습니까?

+0

하나의 listview와 하나의 Custom 어댑터가 케이스를 기반으로 다른보기 (xml)를 부 풀리는 가장 좋은 방법입니다. –

+0

yupp u 이렇게하면 다른 xmls을 팽창시킬 수 있습니다. – Shubham

+0

사용자 정의보기가이를 해결할 수 있으며 단일보기로 여러 어댑터를 사용할 수 없습니다. 그것은 다른 어댑터를 대체 할 것입니다. – KaHeL

답변

0

먼저이에 대한 CustomAdapter를 만들어야합니다

public class CustomAdapter extends BaseAdapter { 
    ArrayList<View> views; 
    Context context; 

    public CustomAdapter(Context context, ArrayList<View> views){ 
     this.views = views; 
     this.context = context; 
    } 

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

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

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

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     View rowView = views.get(i); 
     /*set the views of the rowView here but take note use try catch since you can't be sure if the view will be present or not this is the part where I do not advice it to have different custom views per row but it's all yours to do your tricks*/ 

     return rowView; 
    } 
} 

을 그리고 그것을 여기 내 샘플 방식의 사용을 만들 :

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.test); 

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

     CustomAdapter adapter = new CustomAdapter(MainActivity.this,views); 
     ListView custom_list = (ListView)findViewById(R.id.list_custom); 
     custom_list.setAdapter(adapter); 

     LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view1 = inflater.inflate(R.layout.view1, null); 
     View view2 = inflater.inflate(R.layout.view2, null); 

     views.add(view1); 
     views.add(view2); 
     adapter.notifyDataSetChanged(); 
} 

필요하다면 해결 방법을 취하지 만 기본적으로 이는 단지 문제입니다. 뷰를 확대하고 arrayList에 전달한 다음 listView에 설정합니다.

3

단일 어댑터를 사용하고 목록의 위치를 ​​기반으로 다른보기를 부 풀리면됩니다. 이 질문에 좋은 답변은 여기에 있습니다 :

Android ListView with different layouts for each row

+0

다양한 유형의 정보에 대해 단일 어댑터를 어떻게 사용합니까? "스포츠"객체를 사용하여 하단 카드를 부 풀리는 최상위 카드와 "날씨"객체를 팽창 시켰다고 가정 해 봅시다. 어떻게 어댑터에서 작동합니까? 이것은 내 주요 문제입니다 – AndroidEnthusiast

+0

나는 이것을 정확히 한 적이 없습니다. 그러나 추측 컨스 트럭 터를 사용하여 사용자 정의 어댑터에 2 개의 데이터 소스를 전달한 다음, 어느 레이아웃에서 팽창하는지에 따라 필요한 데이터 소스에서 데이터를 가져올 수 있습니다. 각 데이터 소스에서 올바른 항목을 가져 오기 위해 getView 메소드에서 position 변수를 조작해야 할 수도 있지만 문제가 많지 않을 것이라고 생각합니다. – Dreagen

관련 문제