Android 具有很长文本的ListView无法平滑滚动。如何提高性能?
我创建的一些视图包含很长的文本(即15k字符)。我怎样才能在没有任何障碍的情况下滚动这些视图? 我曾尝试在一个单独的威胁中创建视图,因为我认为延迟可能来自度量过程——但当视图添加到ListView时,hickup仍然存在。Android 具有很长文本的ListView无法平滑滚动。如何提高性能?,android,listview,Android,Listview,我创建的一些视图包含很长的文本(即15k字符)。我怎样才能在没有任何障碍的情况下滚动这些视图? 我曾尝试在一个单独的威胁中创建视图,因为我认为延迟可能来自度量过程——但当视图添加到ListView时,hickup仍然存在。 有人对如何处理这个问题有不同的想法吗?尽管您没有提供更多信息,但请尝试一下 Listview页脚用作页脚布局 hick ups同时有这么多可见/活动/存在的数据是正常的 与其花很多时间来改善设计糟糕的系统的性能,有时最好改变这种设计。这里有一些替代解决方案,它们只需要同时存在
有人对如何处理这个问题有不同的想法吗?尽管您没有提供更多信息,但请尝试一下 Listview页脚用作页脚布局
hick ups同时有这么多可见/活动/存在的数据是正常的 与其花很多时间来改善设计糟糕的系统的性能,有时最好改变这种设计。这里有一些替代解决方案,它们只需要同时存在一个或几个文本
import android.widget.Toast;
public class TuneAdapter extends BaseAdapter {
LayoutInflater inflater;
Context mcontext;
String[] name={"Donald Duck","Peter griffin","Lion roaring","Boo laugh","Cowboy","Tarzan","Bird word","Angry cat","Madagascar Move"};
int[]image={R.drawable.donald,R.drawable.peter,R.drawable.lion,R.drawable.boo,R.drawable.cow,R.drawable.tarze,R.drawable.bird,R.drawable.cat,R.drawable.meda};
int[] audio={R.raw.donald,R.raw.peter_griffin_fart,R.raw.lion_roaring,R.raw.boo_laugh,R.raw.cowboy,R.raw.tarzan,R.raw.bird_is_the_word,R.raw.angry_cat,R.raw.madagascar_move_it};
public TuneAdapter(Activity activity) {
// TODO Auto-generated constructor stub
mcontext=activity;
inflater=(LayoutInflater) mcontext.getSystemService(mcontext.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return audio.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder holder;
if(convertView==null)
{
holder=new ViewHolder();
convertView=inflater.inflate(R.layout.tuneadapter, null);
holder.image=(ImageView) convertView.findViewById(R.id.tune_image);
holder.name=(TextView) convertView.findViewById(R.id.Tune_name);
holder.use=(TextView) convertView.findViewById(R.id.tune_use);
holder.visualizer=(VisualizerView) convertView.findViewById(R.id.visualizerView1);
holder.play=(ImageButton) convertView.findViewById(R.id.tune_play);
convertView.setTag(holder);
}
else
{
holder=(ViewHolder) convertView.getTag();
}
holder.image.setImageResource(image[position]);
holder.name.setText(name[position]);
holder.use.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new SvaeSDCard(audio[position],name[position]).execute(1);
}
});
holder.play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MediaPlayer mPlayer = MediaPlayer.create(mcontext,audio[position]);
mPlayer.start();
holder.play.setVisibility(View.INVISIBLE);
holder.visualizer.setVisibility(View.VISIBLE);
holder.visualizer.link(mPlayer);
Paint paint = new Paint();
paint.setStrokeWidth(10f);
paint.setAntiAlias(true);
paint.setColor(Color.argb(255, 0, 0, 0));
BarGraphRenderer barGraphRendererBottom = new BarGraphRenderer(3, paint, false);
holder.visualizer.addRenderer(barGraphRendererBottom);
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
holder.play.setVisibility(View.VISIBLE);
}
});
}
});
return convertView;
}
class ViewHolder
{
ImageView image;
TextView name,use;
VisualizerView visualizer;
ImageButton play;
}
}
请发布所有相关的代码,如适配器等。否则将很难查明问题。一般来说,长文本不应该是一个问题,其他的东西一定是错的。
import android.widget.Toast;
public class TuneAdapter extends BaseAdapter {
LayoutInflater inflater;
Context mcontext;
String[] name={"Donald Duck","Peter griffin","Lion roaring","Boo laugh","Cowboy","Tarzan","Bird word","Angry cat","Madagascar Move"};
int[]image={R.drawable.donald,R.drawable.peter,R.drawable.lion,R.drawable.boo,R.drawable.cow,R.drawable.tarze,R.drawable.bird,R.drawable.cat,R.drawable.meda};
int[] audio={R.raw.donald,R.raw.peter_griffin_fart,R.raw.lion_roaring,R.raw.boo_laugh,R.raw.cowboy,R.raw.tarzan,R.raw.bird_is_the_word,R.raw.angry_cat,R.raw.madagascar_move_it};
public TuneAdapter(Activity activity) {
// TODO Auto-generated constructor stub
mcontext=activity;
inflater=(LayoutInflater) mcontext.getSystemService(mcontext.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return audio.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder holder;
if(convertView==null)
{
holder=new ViewHolder();
convertView=inflater.inflate(R.layout.tuneadapter, null);
holder.image=(ImageView) convertView.findViewById(R.id.tune_image);
holder.name=(TextView) convertView.findViewById(R.id.Tune_name);
holder.use=(TextView) convertView.findViewById(R.id.tune_use);
holder.visualizer=(VisualizerView) convertView.findViewById(R.id.visualizerView1);
holder.play=(ImageButton) convertView.findViewById(R.id.tune_play);
convertView.setTag(holder);
}
else
{
holder=(ViewHolder) convertView.getTag();
}
holder.image.setImageResource(image[position]);
holder.name.setText(name[position]);
holder.use.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new SvaeSDCard(audio[position],name[position]).execute(1);
}
});
holder.play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MediaPlayer mPlayer = MediaPlayer.create(mcontext,audio[position]);
mPlayer.start();
holder.play.setVisibility(View.INVISIBLE);
holder.visualizer.setVisibility(View.VISIBLE);
holder.visualizer.link(mPlayer);
Paint paint = new Paint();
paint.setStrokeWidth(10f);
paint.setAntiAlias(true);
paint.setColor(Color.argb(255, 0, 0, 0));
BarGraphRenderer barGraphRendererBottom = new BarGraphRenderer(3, paint, false);
holder.visualizer.addRenderer(barGraphRendererBottom);
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
holder.play.setVisibility(View.VISIBLE);
}
});
}
});
return convertView;
}
class ViewHolder
{
ImageView image;
TextView name,use;
VisualizerView visualizer;
ImageButton play;
}
}