当我在任何 imageView 上致电setImageBitmap()
时,它会滞后于用户界面。我正在使用 listView ,因此我必须在滚动时设置imageView。请不要建议使用Picasso或其他图像下载帮助程序,因为问题与下载问题无关,并且它对使用这种库没有帮助。
编辑:
适配器:
public class GönderiItemAdapter extends BaseAdapter{
private final Activity mActivity;
private final Vector<String> mVeri;
private boolean mProfil = false;
private boolean mKullanıcı;
private boolean mArama = false;
private Profil mProfilBilgi;
private String mAramaString;
public GönderiItemAdapter( Activity pActivity, String[] pVeri, boolean pKullanıcı, Profil pProfililgi ){
this(pActivity, pVeri);
mProfil = true;
mKullanıcı = pKullanıcı;
mProfilBilgi = pProfililgi;
}
public GönderiItemAdapter( Activity pActivity, final String[] pVeri, String pAramaString ){
this(pActivity, pVeri);
mAramaString = pAramaString;
mArama = true;
}
public GönderiItemAdapter( Activity pActivity, final String[] pVeri){
if( Ayarlar.sGönderiler == null )
Ayarlar.yükleGönderiler( pActivity );
mActivity = pActivity;
mVeri = new Vector<String>();
for( int i = 0; i < pVeri.length; ++i )
mVeri.add( pVeri[ i ] );
mProfil = false;
}
public void ekleÜst( String[] pVeri ){
for( int i = pVeri.length - 1; i >= 0; --i ){
Gönderi gönderi = Ayarlar.alGönderi( pVeri[ i ], mActivity, false);
if( !gönderi.mGönderenId.equals( "-1" ) )
mVeri.add( 0 , pVeri[ i ] );
}
}
public void ekleAlt( String[] pVeri, final TextView pMetin ){
for( int i = 0; i < pVeri.length; ++i ){
Gönderi gönderi = Ayarlar.alGönderi( pVeri[ i ], mActivity, false);
if( gönderi.mGönderenId.equals( "-1" ) )
mActivity.runOnUiThread( new Runnable() {
@Override
public void run() {
pMetin.setText( R.string.dahayok );
}
} );
else
mVeri.add( pVeri[ i ] );
}
}
public void al( ){
GenelEşzamansızİşlem giş = new GenelEşzamansızİşlem();
giş.arkaplanİşlem = new Thread( new Runnable() {
@Override
public void run() {
for( int i = 0; i < mVeri.size(); ++i )
Ayarlar.alGönderi( mVeri.get( i ), mActivity, false);
}
} );
if( Araçlar.mobilVeri(mActivity) )
giş.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
else
giş.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
static public void al2( final String[] pVeri, final Activity pActivity ){
GenelEşzamansızİşlem giş = new GenelEşzamansızİşlem();
giş.arkaplanİşlem = new Thread( new Runnable() {
@Override
public void run() {
if( Ayarlar.sGönderiler == null )
Ayarlar.yükleGönderiler(pActivity);
Vector<String> idVector = new Vector<String>();
for( int i = 0; i < pVeri.length; ++i )
if( !Ayarlar.sGönderiler.containsKey( pVeri[i] ) )
idVector.add( pVeri[i] );
String[] idArray = new String[ idVector.size() ];
for( int i = 0; i < idArray.length; ++i )
idArray[ i ] = idVector.get( i );
if( idArray.length > 0 )
Ayarlar.alTopluGönderi(idArray, pActivity);
}
} );
try{
giş.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR).get();
}catch( Exception e ){
e.printStackTrace();
}
}
public void güncelle( ){
for( int i = 0; i < mVeri.size(); ++i ){
Ayarlar.alGönderi( mVeri.get( i ), mActivity, false).güncelle( mActivity );
}
}
@Override
public int getCount(){
if( mProfil )
return mVeri.size() + 1;
return mVeri.size();
}
@Override
public int getViewTypeCount(){
return 2;
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position){
if( mProfil && position == 0 )
return 1;
else
return 0;
}
@Override
public boolean areAllItemsEnabled(){
return false;
}
@Override
public boolean isEnabled( int position ){
return false;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) mActivity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if( mProfil && position == 0 )
{
View v = inflater.inflate( R.layout.header_profil, null);
final Button sağ = (Button) v.findViewById( R.id.sag );
View line1 = v.findViewById( R.id.line1);
final Button orta = (Button) v.findViewById( R.id.orta );
View line2 = v.findViewById( R.id.line2);
final Button sol = (Button) v.findViewById( R.id.sol );
if( mKullanıcı ){
sağ.setVisibility( View.VISIBLE );
sağ.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
( ( ExplorerActivity )mActivity ).yeniGönderi();
}
} );
sağ.setText( R.string.yeniGonderi );
}
else{
sağ.setVisibility( View.GONE );
line2.setVisibility( View.GONE );
if( !Ayarlar.sFavoriler.contains( mProfilBilgi.mID ) )
sol.setText( R.string.favoriEkle );
else
sol.setText( R.string.favoriCikar );
sol.setVisibility( View.VISIBLE );
sol.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
( ( ExplorerActivity )mActivity ).favori( mProfilBilgi.mID );
if( !Ayarlar.sFavoriler.contains( mProfilBilgi.mID ) )
sol.setText( R.string.favoriEkle );
else
sol.setText( R.string.favoriCikar );
}
} );
}
v.findViewById( R.id.profil ).setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
( ( ExplorerActivity )mActivity ).gösterProfil( mProfilBilgi );
}
} );
return v;
}
else{
if( mProfil )
position -= 1;
View v;
Gönderi g;
if( convertView == null ){
v = inflater.inflate( R.layout.gonderi_liste_nesnesi, null);
g = new Gönderi();
g.mAnaDüzen = (LinearLayout) v;
g.mProfilFotoğrafı = (CircularImageView) v.findViewById( R.id.profil_photo );
g.mGönderenAdı = (TextView) v.findViewById( R.id.gonderen_adi );
g.mGönderiZamanı = (TextView) v.findViewById( R.id.gonderi_tarihi );
g.mDönem = (TextView) v.findViewById( R.id.gonderen_donemi );
g.mGönderi = (TextView) v.findViewById( R.id.gonderi );
g.mBeğen = (TextView) v.findViewById( R.id.begen );
g.mBeğeniText = (TextView) v.findViewById( R.id.begeniSayi );
v.setTag( g );
}
else{
g = (Gönderi) convertView.getTag();
v = convertView;
}
final Gönderi gönderi = Ayarlar.alGönderi( mVeri.get( position ), mActivity, false);
g.mGönderenAdıString = gönderi.mGönderenAdıString;
g.mDüzenliTarih = gönderi.mDüzenliTarih;
g.mDönemString = gönderi.mDönemString;
g.mGönderiHamMetin = gönderi.mGönderiHamMetin;
g.mBeğeniTextString = gönderi.mBeğeniTextString;
g.mBeğeni = gönderi.mBeğeni;
g.mBeğenildi = gönderi.mBeğenildi;
g.mBeğeniVerisi = gönderi.mBeğeniVerisi;
g.mGönderenId = gönderi.mGönderenId;
g.mBeğeniSayısı = gönderi.mBeğeniSayısı;
g.mGönderiId = gönderi.mGönderiId;
g.ayarla( mArama, mAramaString, mActivity);
if( !mArama ){
g.beğeniİşlemler( mActivity );
if( g.mBeğenildi ){
g.mBeğen.setOnClickListener( g.mBeğenmeİşlem );
g.mBeğen.setText( R.string.hoslanma );
}
else
g.mBeğen.setOnClickListener( g.mBeğenİşlem );
final Gönderi foo = g;
g.mBeğeniText.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog( mActivity );
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_begeni);
ListView liste = (ListView) dialog.findViewById( R.id.liste );
Vector<Profil> profiller = new Vector<Profil>();
for( int i = 0; i < foo.mBeğeni.size(); ++i ){
Profil p = Ayarlar.alProfil( foo.mBeğeni.get( i ).mGönderenID , mActivity);
Log.w( "id" , p.mID);
if( p != null && !p.mID.equals( Ayarlar.sMevcutId ) )
profiller.add( p );
}
KartAdapter adapter = new KartAdapter(mActivity, profiller, mActivity, dialog);
liste.setAdapter( adapter );
if( profiller.size() != 0 )
dialog.show();
}
} );
g.mProfilFotoğrafı.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View arg0) {
((ExplorerActivity) mActivity).açProfil( gönderi.mGönderenId );
}
});
g.mGönderenAdı.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View arg0) {
((ExplorerActivity) mActivity).açProfil( gönderi.mGönderenId );
}
});
}
else{
g.mAnaDüzen.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View arg0) {
((ExplorerActivity) mActivity).açGönderi( gönderi.mGönderiId );
}
});
}
return v;
}
}
}
答案 0 :(得分:0)
您可以使用ViewHolder Design Pattern
:
http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder
使用图像占位符可防止列表图像混乱,并在下载完成后将图像占位符替换为图像(如果正在显示)或
你可以使用新的android小部件:
https://developer.android.com/preview/material/ui-widgets.html#recyclerview
答案 1 :(得分:0)
我已经通过减少gc调用和组织我的适配器解决了我的问题。但真正的问题是文件输出。我减少了对文件输出函数的调用,它解决了我的问题。我将所有文件输出放在onPause方法中。应用程序暂停时会略微滞后,但这是一种更好的方式。