这是我的XML
<RelativeLayout
android:id="@+id/preview_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/socialbottom"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Preview"
android:textColor="@color/white"
android:textStyle="bold" />
<ImageButton
android:id="@+id/close_preview_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/close_btn" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/empty_view"
android:layout_below="@+id/preview_header">
<ListView
android:id="@+id/preview_dialog_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@android:color/transparent"
android:dividerHeight="8dp"
android:scrollbars="none"></ListView>
</RelativeLayout>
<View
android:id="@+id/empty_view"
style="@style/Space"
android:layout_width="match_parent"
android:layout_above="@+id/preview_add_more_btn"></View>
<Button
android:id="@+id/preview_add_more_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/empty_view1"
android:background="@color/content_text"
android:drawableLeft="@drawable/plus_icon"
android:drawablePadding="50dp"
android:gravity="center_horizontal"
android:padding="8dp"
android:paddingLeft="300dp"
android:text="@string/add_more"
android:textColor="@color/white" />
<View
android:id="@+id/empty_view1"
style="@style/Space"
android:layout_width="match_parent"
android:layout_above="@+id/footer_preview"></View>
<RelativeLayout
android:id="@+id/footer_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<EditText
android:id="@+id/preview_input_timeline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true"
android:background="@color/acticty_textbox"
android:hint="What's up, admin?"
android:inputType="textMultiLine"
android:padding="8dp" />
<Button
android:id="@+id/preview_post_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/preview_input_timeline"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:background="@drawable/savebox"
android:padding="8dp"
android:text="Post"
android:textAllCaps="true"
android:textColor="@color/white"
android:textStyle="bold" />
</RelativeLayout>
这是JAVA
public View getView(int position, View convertView, ViewGroup parent) {
convertView = mInflater.inflate(R.layout.preview_list_view, null);
ImageButton removeBtn = (ImageButton) convertView.findViewById(R.id.remove_preview);
ImageView imageView = (ImageView) convertView.findViewById(R.id.preview_image);
VideoView videoView = (VideoView) convertView.findViewById(R.id.preview_video);
Log.e("video sizzzessssssss", String.valueOf(imagesList.size()));
if (SocialActivity.MEDIA_TYPE_IMAGE == previewType) {
videoView.setVisibility(View.INVISIBLE);
imageView.setVisibility(View.VISIBLE);
String path = imagesList.get(position);
File imgFile = new File(path);
if (imgFile.exists()) {
// Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
// imageView.setImageBitmap(myBitmap);
Bitmap d = new BitmapDrawable(context.getResources(), imgFile.getAbsolutePath()).getBitmap();
int nh = (int) (d.getHeight() * (512.0 / d.getWidth()));
Bitmap scaled = Bitmap.createScaledBitmap(d, 512, nh, true);
imageView.setImageBitmap(scaled);
}
} else {
imageView.setVisibility(View.INVISIBLE);
videoView.setVisibility(View.VISIBLE);
videoView.setVideoPath(imagesList.get(position));
MediaController mediaControls = new MediaController(SocialActivity.socialActivity);
videoView.setMediaController(mediaControls);
videoView.start();
videoView.pause();
Log.e("path video", imagesList.get(position));
}
removeBtn.setOnClickListener(new ListCustomClickEvents(callback, position));
return convertView;
}
答案 0 :(得分:0)
您必须使用setTag()
和getTag()
喜欢这些
public class ViewHolder {
//Declare yours all component here
// like below example
private ImageView profile_iv;
private TextView name_tv;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
///Firstly check the convertView is null or not like below
final ViewHolder _viewHolder;
if (convertView == null) {
_viewHolder = new ViewHolder();
LayoutInflater _layInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = _layInflater.inflate(R.layout.connection_friend_item, null);
///Finds yours layout items id here like below example
_viewHolder.profile_iv = (ImageView) convertView.findViewById(R.id.profile_iv);
_viewHolder.name_tv = (TextView) convertView.findViewById(R.id.name_tv);
convertView.setTag(_viewHolder);
} else {
_viewHolder = (ViewHolder) convertView.getTag();
}
////Set the data in the layout's item as below
_viewHolder.name_tv.setText(imagesList.get(position));
_viewHolder.profile_iv.setImageBitmap(imagesList.get(position));
return convertView;
}
答案 1 :(得分:0)
我认为您应该使用View Holder设计模式使您能够访问每个列表项视图而无需查找,从而节省了宝贵的处理器周期。具体来说,它避免了在ListView滚动期间频繁调用findViewById(),这将使其平滑。
请参阅下面的演示代码:
public static class ViewHolder{
public TextView aliasTextView;
public TextView numTextView;
public TextView statusTextView;
public RelativeLayout mainLayout;
public NetworkImageView _profileImageView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final ViewHolder holder;
LayoutInflater inflater = (LayoutInflater)_context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DisputeListBean bean = _ArrayList.get(position);
if(convertView == null)
{
holder = new ViewHolder();
v = inflater.inflate(R.layout.dispute_row, null,false);
holder.mainLayout = (RelativeLayout)v.findViewById(R.id.mainLayout);
holder.aliasTextView = (TextView)v.findViewById(R.id.user_name);
holder.statusTextView = (TextView)v.findViewById(R.id.user_status);
holder._profileImageView = (NetworkImageView)v.findViewById(R.id.profile_pic);
v.setTag(holder);
}else {
holder = (ViewHolder) v.getTag();
}
holder.aliasTextView.setText(bean.getAlias_name().toUpperCase());
return v;
}
答案 2 :(得分:0)
不要将listview的高度作为wrap_content。当您将高度设置为wrap_content时,listview将首先填充少量列表项以确定listview的实际高度
答案 3 :(得分:0)
由于ListView
中的内部缓存机制,Android将为每个可见项触发两次getView
方法。当您打开包含ListView的Activity / Fragment / View时,它仅在第一次发生。有关更多信息,请参阅Google ScrapViews ListView
请求。
要解决您的问题,您只需检查
即可if(convertView == null)
convertView = inflate...
或使用Google的ViewHolder模式。