我試圖複製此Google Now卡界面。我並不擔心卡片的感覺,但我更關心視圖是如何構建的。使用不同類型的適配器根據行創建視圖
我想用它返回對應於該行的不同佈局的適配器。但正如你所看到的,這兩個視圖都包含了彼此不相關的信息。
是否有可能有一個ListView與不同的行適配器?
或者我如何使用自定義視圖來實現這一點?
我試圖複製此Google Now卡界面。我並不擔心卡片的感覺,但我更關心視圖是如何構建的。使用不同類型的適配器根據行創建視圖
我想用它返回對應於該行的不同佈局的適配器。但正如你所看到的,這兩個視圖都包含了彼此不相關的信息。
是否有可能有一個ListView與不同的行適配器?
或者我如何使用自定義視圖來實現這一點?
首先,你需要創建一個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上。
您將需要使用單個適配器並根據列表中的位置膨脹不同視圖。一個很好的回答這個問題是在這裏:
如何爲不同類型的信息使用單個適配器?比方說,我正在使用「運動」對象來充氣頂牌和「天氣」物體來充氣底牌,這對於適配器來說會如何工作?這是我的主要問題 – AndroidEnthusiast
我從來沒有這樣做過。但是猜測你可能想要使用它的構造函數將2個數據源傳遞到你的自定義適配器中,然後你可以根據你膨脹的佈局從你需要的任何數據源獲取數據。您可能需要在getView方法中操作位置變量,以便從每個數據源中獲取正確的項目,但我認爲這應該不是什麼大問題 – Dreagen
一個列表視圖和一個自定義適配器,根據情況膨脹不同的視圖(xml)是最好的方式。 –
yupp你必須這樣做,像這種方式只膨脹不同的xmls – Shubham
自定義視圖可以解決它,沒有你不能有一個視圖的多個適配器。它將取代其他適配器的情況下。 – KaHeL