androidlistview問題
Ⅰ Android ListView問題
如果是這個錯液升誤的話Custom view IndexableListView is not using the 2- or 3-argument View constructors:
改正方法燃埋喊皮野:寫三個構造函數就OK了
public IndexableListView(Context context) {
super( context);
}
public IndexableListView(Context context, AttributeSet attrs) {
super( context, attrs );
}
public IndexableListView(Context context, AttributeSet attrs, int defStyle) {
super( context, attrs, defStyle );
}
Ⅱ android listview viewholder 錯亂怎麼解決代碼
在沒有用viewHolder的情況下,listView表現效率低下。如果載入的數量過多則會一點點的消耗內存,直到拋出oom。開始非同步載入圖片會出現圖片錯位的問題,後來查閱資料將holder里邊的圖片地址和圖片一一對應起來,在非同步載入的回調函數中將其替換回來。
holder.thumb_image.setTag(hotel.getHotelTitlePic());
//避免圖標錯位,在非同步載入成功後替換回來
ImageView imageView = (ImageView) listView.findViewWithTag(imageUrl);
if(imageView != null){
imageView.setImageDrawable(imageDrawable);
imageView.setTag("");
}
以上關鍵代碼解決圖片錯位問題。
下面是getView()方法
public View getView(int position, View rowView, ViewGroup parent){
final
MHotelInfo hotel = this.getItem(position);
if (rowView == null) {
holder =
new ViewHolder();
LayoutInflater inflater = ((Activity)
this.getContext())
.getLayoutInflater();
rowView =
inflater.inflate(R.layout.hotel_item_view, null);
holder.typeName =
(TextView) rowView.findViewById(R.id.hotelType);
holder.thumb_image=(ImageView)rowView.findViewById(R.id.img);// 縮略圖
holder.distance = (TextView) rowView.findViewById(R.id.distance);
rowView.setTag(holder);
}else{
holder = (ViewHolder)
rowView.getTag();
}
// 設置ListView的相關值
holder.thumb_image.setTag(hotel.getHotelTitlePic());
//避免圖標錯位,在非同步載入成功後替換回來
holder.typeName.setText(hotel.getTypeName());
if(null ==
hotel.getHotelTitlePic() || hotel.getHotelTitlePic().equals("")){
//如果沒有圖標就顯示默認圖標
holder.thumb_image.setImageResource(R.drawable.downloadfalse);
}else{
//非同步載入圖片
imageLoader.loadDrawable(hotel.getHotelTitlePic(), new ImageCallback() {
public void imageLoaded(Drawable imageDrawable, String imageUrl) {
ImageView imageView = (ImageView) listView.findViewWithTag(imageUrl);
if(imageView != null){
imageView.setImageDrawable(imageDrawable);
imageView.setTag("");
}
}
});
}
return
rowView;
}
static class ViewHolder {
TextView
typeName;
ImageView thumb_image;
}
但是ViewHolder為什麼是被設計成static類型的,本人一直沒弄清楚。在網上找了些資料但是一直沒能看到一個能說服我的理由。又說節省內存,保持對象的唯一性,還有說保持圖片不錯亂但是個人感覺都不怎麼靠譜。今天我試了下將static去掉照常運行沒感覺和以前有什麼區別。後來我查了下static類的一些特性,首先ViewHolder是一個內部類若是static類的話則不需要依賴外部類的對象。也就是說只有static的內部類的成員變數才可以被聲明成static類型,若內部類不是static類型的則不可以聲明靜態成員變數。不知道是不是static內部類的這個特性吸引了設計者?如果有誰清楚這個問題還請不吝賜教。
Ⅲ android的ListView操作問題
寫一個適配器,public class MyAdapter extends BaseAdapter{
/伍哪/重寫擾源抽象方法
//有一個getView(int arg0, View arg1, ViewGroup arg2)這個方法必須重寫
其中arg0就是這個item在listView中的位置,你寫一個內部類來實現緩橘態介面OnClickListenner,
然後比如每一個item有一個Button b,b.setOnclickListenner(new MyListenner()),你有了item的position,就可以操作了
}
Ⅳ android 中listView顯示的問題
這個不知道
Ⅳ Android ListView比較怪異的現象,急求大神回答
你用viewpager可以解決。
你用一個listview去set不同的Adapter會有問題的。
你set不漏和吵同的Adapter,要先把原來的item clear掉,然後又重新繪制界面,性能上來看是不太好的,如果有個用戶閑得蛋疼沒什麼鳥事做,不斷的點模塊一,模塊二之間來回切換,你的應用就不斷的 clear,clear,clear......不斷的繪制界面,繪制界面,繪制界面。。。。。。如果你的listview裡面有載入到圖返侍片的,性能就更加差了,而且,很有可能會報內存溢出。
你用viewpager每個view 裝載一個listview,點模塊一,模塊二也是viewpager的切換,就不用你在同一個listview裡面去set不同的Adapter。
你現在的這種方法理論是可以實現的,但實際上很容易出現問題。
你用viewpager重新搞過,布局也要重新調整,如果不棚散熟悉viewpager的就先網上搜索一下相關viewpager的資料。
Ⅵ android listview問題,求解。listview顯示,行與行有堆疊
那是ListView的入門教程吧,主要用來熟悉控制項用法的,寫的簡單省事但不規范,真正在項目中使用時要比這復雜,首先不推薦數組保存大量View,因為開銷太大。另外為了提升流暢性,避免大量的inflate和findViewById操作,很多人都愛加個ViewHolder類……
你可以把ListViewAdapter類改成下面這樣(Context傳Activity實例,像這里就是傳MainActivity.this),不過我這么寫其實也有偷懶,還能寫的更完善,或者用RecyclerView代替。
java"> {
LayoutInflaterinflater;
String[]itemTitles;
String[]itemTexts;
int[]itemImageRes;
publicListViewAdapter(Contextcontext,String[]itemTitles,
String[]itemTexts,int[]itemImageRes){
inflater=LayoutInflater.from(context);
this.itemTitles=itemTitles;
this.itemTexts=itemTexts;
this.itemImageRes=itemImageRes;
}
publicintgetCount(){
returnitemTitles!=null?itemTitles.length:0;
}
@Override
publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
returnnull;
}
publiclonggetItemId(intposition){
returnposition;
}
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
ViewHolderviewHolder;
if(convertView==null){
convertView=inflater.inflate(R.layout.item,parent,false);
viewHolder=newViewHolder();
viewHolder.title=(TextView)convertView
.findViewById(R.id.itemTitle);
viewHolder.text=(TextView)convertView
.findViewById(R.id.itemText);
viewHolder.image=(ImageView)convertView
.findViewById(R.id.itemImage);
convertView.setTag(viewHolder);
}else{
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.title.setText(itemTitles[position]);
viewHolder.text.setText(itemTexts[position]);
viewHolder.image.setImageResource(itemImageRes[position]);
returnconvertView;
}
classViewHolder{
publicTextViewtitle;
publicTextViewtext;
publicImageViewimage;
}
}
Ⅶ Android中使用listview出現數據紊亂
ListView的Item child view個數是最多能顯示的item數+2。
也就是說,假設你當前看到ListView的item數最多是9, 那這個ListView其實最多隻有11個child view, 但ListView可能有幾十幾扒臘百個Item, 怎麼辦呢簡伍?
當你向下滑動的時候, 把第12個item滑出來的時候,事實上第1,2個item已經完全看不到了,所以第12個Item是重用第1個Item的view, 第13個item是重用的第2個Item的view,也就是ListAdapter.getView()中作為參數傳入的convertView。
這樣明白了吧, 針對第1個Item view,如果你給裡面的控制項設置攔此或了一些屬性,那麼當你滑動listview的時候,第12個item上也會是一樣的item view。
So, 兩種辦法:
1) 在ListAdapter.getView()這個方法中, 每次都是重新創建一個view return。
2)在ListAdapter.getView()這個方法中,還是會重用convertView,但是每次都要重新去初始化convertView的屬性。
Ⅷ Android listview問題
listview 的item是復差鍵用的,item被翻出時會被回收用作下面的翻上來虛指巧的項
你要在adapter裡面初始化每個控逗薯件
Ⅸ android listView問題
在ListView的BaseAdapter裡面加一個 int expandIndex=-1;屬性,表示需要顯示圖片的位置,並為其增加set和get函數;
在getView裡面做判斷,如果當前position等於expandIndex,則顯示imageView,不等則隱藏;
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent)
{
……
if(positoin==expandIndex)
{
imageView.setVisibility(View.VISIBLE);
}
else
{
imageView.setVisibility(View.INVISIBLE);
}
漏姿……
}
然後設置listview點擊事件,每次點擊,把被點擊的位置設為expandIndex,並刷新ListVIew如下
mListView.setOnItemClickListener(newOnItemClickListener()
返嫌絕{
@Override
publicvoidonItemClick(AdapterView<?>parent,Viewview,
intposition,longid)
者陪{
mAdapter.setExpandIndex(position);
mAdapter.notifyDataSetChanged();
}
});