[英]Change layout of selected list item in Android
我需要創建一個ListView
並僅為所選行顯示更詳細的布局,以便向客戶顯示更多信息。 我嘗試的是以下內容:
newsListView.setAdapter(new NewsListAdapter(this, news));
newsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//Here I tried to change layout of this row only
view = inflater.inflate(R.layout.listitem_news_selected, null);
TextView info = (TextView) view.findViewById(R.id.info);
NewsData news = (NewsData) parent.getItemAtPosition(position);
info.setText(news.getInfo());
}
});
這是NewsListAdapter
:
public class NewsListAdapter extends BaseAdapter {
List<NewsData> items;
Activity context;
/* private view holder class */
private class ViewHolder {
TextView title;
ImageView image;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listitem_news, null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.image = (ImageView) convertView.findViewById(R.id.imageView1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
NewsData news = items.get(position);
holder.title.setText(news.getTitle());
new DownloadImageTask(holder.image).execute(news.getImgUrl());
return convertView;
}
}
在這個問題中 ,提出了類似的問題,但它沒有幫助我。 我猜我需要用Adapter做一些事情,但我被困在這里。 任何想法將不勝感激。
你正在做什么甚至不會改變ListView項目的視圖,你正在膨脹一個未知的視圖。
解:
在適配器中創建一個方法來設置所選項的位置:
public void selectedItem(int position)
{
this.position = position; //position must be a global variable
}
當位置等於點擊項位置時,在getView
為視圖充氣
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listitem_news, null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.image = (ImageView) convertView.findViewById(R.id.imageView1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
NewsData news = items.get(position);
holder.title.setText(news.getTitle());
new DownloadImageTask(holder.image).execute(news.getImgUrl());
if(this.position == position)
{
view2 = mInflater.inflate(R.layout.listitem_news_selected, null);
TextView info = (TextView) view2.findViewById(R.id.info);
info.setText(news.getInfo());
return view2;
}
return convertView;
}
在你的onItemClick
使用它
NewsListAdapter adapter = new NewsListAdapter(this, news);
newsListView.setAdapter(adapter );
newsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
adapter.selectedItem(position);
adapter.notifyDataSetChange();
}
});
始終有適配器的reference/object
,因此您可以在單擊它時刷新listView。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.