2013-02-20 2 views
0

Мое приложение является активностью списка, который содержит 26 строк, каждый из которых содержит изображение и текст, каждая вещь работает нормально, но прокрутка списка показывает некоторое отставание, а не гладкое, если прокручивать ее так же гладко, как и по умолчанию андроид списка контактов,Список прокрутки lag

я пытался: lv.setFastScrollEnabled(true);

также пытался уменьшить размер изображения в каждой строке, пока я заменил все изображения с ic_launcher изображений для тестирования, но та же задержка есть.

, но это не имеет никакого значения для сглаживания свитка моего списка, любые советы или помощь будут высоко оценены. примечание: классы, названные в арабском языке.

мой код:

Меню Класс:

public class Menu extends ListActivity { 
    String classes[] = { "المقدمة", "رحلتي", "اليوم الأول", "اليوم الثاني", "اليوم الثالث", 
     "اليوم الرابع", "اليوم الخامس", "اليوم السادس", "اليوم السابع", "اليوم الثامن", "اليوم التاسع", "اليوم العاشر", "اليوم الحادي عشر", 
     "اليوم الثاني عشر", "اليوم الثالث عشر", "اليوم الرابع عشر", "اليوم الخامس عشر", "اليوم السادس عشر", "اليوم السابع عشر", 
     "اليوم الثامن عشر", "اليوم التاسع عشر", "اليوم العشرون", "اليوم الحادي والعشرين", "اليوم الثاني والعشرين", "اليوم الثالث والعشرين", "الخاتمة"}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    // create background for whole list as image 
    ListView lv = getListView(); 
    lv.setFastScrollEnabled(true); 
    lv.setCacheColorHint(0); 
    lv.setDivider(new ColorDrawable(0xFFDAB999)); 
    lv.setSelector(android.R.color.transparent); 
    lv.setDividerHeight(10); 
    lv.setPadding(50, 0, 50, 0); 
    lv.setVerticalScrollBarEnabled(false); 
    lv.setBackgroundResource(R.drawable.a); 

    setListAdapter(new MyArrayAdapter(this, classes)); } 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    // TODO Auto-generated method stub 
    super.onListItemClick(l, v, position, id); 
    String cheese = classes[position]; 
    if(cheese.equals("المقدمة")) cheese = "Introduction"; 
    if(cheese.equals("رحلتي")) cheese = "MyTrip"; 
    if(cheese.equals("اليوم الأول")) cheese = "Day1"; 
    if(cheese.equals("اليوم الثاني")) cheese = "Day2"; 
    if(cheese.equals("اليوم الثالث")) cheese = "Day3"; 
    if(cheese.equals("اليوم الرابع")) cheese = "Day4"; 
    if(cheese.equals("اليوم الخامس")) cheese = "Day5"; 
    if(cheese.equals("اليوم السادس")) cheese = "Day6"; 
    if(cheese.equals("اليوم السابع")) cheese = "Day7"; 
    if(cheese.equals("اليوم الثامن")) cheese = "Day8"; 
    if(cheese.equals("اليوم التاسع")) cheese = "Day9"; 
    if(cheese.equals("اليوم العاشر")) cheese = "Day10"; 
    if(cheese.equals("اليوم الحادي عشر")) cheese = "Day11"; 
    if(cheese.equals("اليوم الثاني عشر")) cheese = "Day12"; 
    if(cheese.equals("اليوم الثالث عشر")) cheese = "Day13"; 
    if(cheese.equals("اليوم الرابع عشر")) cheese = "Day14"; 
    if(cheese.equals("اليوم الخامس عشر")) cheese = "Day15"; 
    if(cheese.equals("اليوم السادس عشر")) cheese = "Day16"; 
    if(cheese.equals("اليوم السابع عشر")) cheese = "Day17"; 
    if(cheese.equals("اليوم الثامن عشر")) cheese = "Day18"; 
    if(cheese.equals("اليوم التاسع عشر")) cheese = "Day19"; 
    if(cheese.equals("اليوم العشرون")) cheese = "Day20"; 
    if(cheese.equals("اليوم الحادي والعشرين")) cheese = "Day21"; 
    if(cheese.equals("اليوم الثاني والعشرين")) cheese = "Day22"; 
    if(cheese.equals("اليوم الثالث والعشرين")) cheese = "Day23"; 
    if(cheese.equals("الخاتمة")) cheese = "Conclusion"; 

    try{ 
     Intent ourIntent; 
     if(position>1 && position<25) { 
       Class ourClass = Class.forName("com.tsn.dr.MyDay"); 
       ourIntent = new Intent(Menu.this, ourClass); 
       ourIntent.putExtra("cheese", cheese);} 
     else { 
       Class ourClass = Class.forName("com.tsn.dr." + cheese); 
       ourIntent = new Intent(Menu.this,ourClass); }    
      startActivity(ourIntent); }                         
       catch (ClassNotFoundException e){ 
          e.printStackTrace(); }} 

public boolean onCreateOptionsMenu(android.view.Menu menu) { 

MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.menu.cool_menu, menu); 

getLayoutInflater().setFactory(new Factory() { 
public View onCreateView(String name, Context context, 
AttributeSet attrs) { 

if (name .equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) { 
try { 

LayoutInflater li = LayoutInflater.from(context); 
final View view = li.createView(name, null, attrs); 

new Handler().post(new Runnable() { 
public void run() { 


view .setBackgroundResource(R.drawable.border3); 

((TextView) view).setTextSize(25); 


Typeface face=Typeface.createFromAsset(getAssets(),"BFantezy.ttf");  
((TextView) view).setTypeface(face); 
((TextView) view).setTextColor(Color.RED); 
} 
}); 
return view; 
} catch (InflateException e) { 
} catch (ClassNotFoundException e) { 
} 
} 
return null; 
} 
}); 
return super.onCreateOptionsMenu(menu); 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 
    switch (item.getItemId()) { 
    case R.id.aboutUs: 
     Intent i = new Intent("com.tsn.dr.ABOUT"); 
     startActivity(i); 

    break; 
    case R.id.preferences: 
     Intent p = new Intent("com.tsn.dr.PREFS"); 
     startActivity(p); 
    break; 
    case R.id.exit: 
     finish(); 
    break; 
} 
return false; 
       } 
     } 

MyArrayAdapter Класс:

public class MyArrayAdapter extends ArrayAdapter<String> { 
private final Activity context; 
private final String[] classes; 
Typeface tf; 

public MyArrayAdapter(Activity context, String[] classes) { 
    super(context, R.layout.row, classes); 
    this.context = context; 
    this.classes = classes; 
       } 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    tf=Typeface.createFromAsset(context.getAssets(),"BFantezy.ttf"); 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView = inflater.inflate(R.layout.row, null, true); 
    TextView textView = (TextView) rowView.findViewById(R.id.row_label); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.row_image); 
    String s = classes[position]; 
    textView.setText(s); 
    ((TextView)textView).setTypeface(tf); 


if (s.startsWith("اليوم الأول")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الثاني")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الثالث")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الرابع")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الخامس")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم السادس")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم السابع")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الثامن")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم التاسع")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم العاشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الحادي عشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الثاني عشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الثالث عشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الرابع عشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الخامس عشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم السادس عشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم السابع عشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الثامن عشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم التاسع عشر")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم العشرون")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الحادي والعشرين")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الثاني والعشرين")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("اليوم الثالث والعشرين")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("الخاتمة")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("رحلتي")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 


if (s.startsWith("المقدمة")) { 

    imageView.setImageResource(R.drawable.ic_launcher); } 

return rowView; }} 
+3

Вы создаете новую строку Просмотр при каждом прокрутке, вам нужно повторно использовать макеты, [используйте подход ViewHolder.] (Http://stackoverflow.com/a/9359237/593709) –

+0

@ Adil Soomro натурально мой друг, я создал свой список, используя классы и im, не использующие XML-список, - это то, что работает с подходом ViewHolder, спасибо –

+0

. Все, что имеет значение, - это реализации вашего адаптера. –

ответ

0

Сначала удалите tf=Typeface.createFromAsset(context.getAssets(),"BFantezy.ttf"); строку из метода getView и использовать его в качестве фи eld (что делает его многоразовым). Вы можете создать свой TypeFace в методе onCreate(), например.

И, во-вторых, вы не перерабатываете виды. Вы создаете новую строку, когда ваш адаптер вызывает метод getView(). Правильная реализация getView() методы является то, что, как показано ниже:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    final ViewHolder holder; 
    if (convertView == null) { 
     holder = new ViewHolder(); 
     // Inflate your row layout 
     convertView = mInflater.inflate(R.layout.YOUR_XML_LAYOUT, null); 
     // set your holder views here. For example; 
     // holder.textview = (TextView) convertView.findViewById(R.id.textview); 
     // 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    // Customize your row items here! For example: 
    // if (s.startsWith("اليوم الثاني والعشرين")) { 
    // imageView.setImageResource(R.drawable.ic_launcher); } 

    return convertView; 
} 

Для большей эффективности, не использует трудоемкие операции в getView() методы, так как он будет называться каждым раз швырнуть/свиток на вашем ListView.

Надеюсь, это поможет.

+0

я попробую это мой дорогой, я вне сейчас, позже и переиграю вас, спасибо большое –

+0

спасибо, но еще одно, если я увеличу размер изображения в каждой строке, это приведет к отставанию прокрутки снова, как решить это. –