如何在Android中创建大动态视图



我在创建和删除视图中有很多问题

例如,我在sqlite数据库中搜索并获取200个记录,我想在我的活动中创建200视图,但它在3或4秒内发生,这对用户体验和性能不利。如何增加每次创建视图的时间?

这些是我创建视图的代码

public class CreateView {
    boolean header_flag=false;
    boolean first_widget=false;
    LinearLayout header_layout;
    List<Words_taha> words_tahaList=new ArrayList<>();


    public   void createHeader(Context context, LinearLayout main_layout, Words_taha words){

        if(header_flag==false){
            header_layout  =new LinearLayout(context);
            header_layout=new LinearLayout(context);
            header_layout.setOrientation(LinearLayout.HORIZONTAL);
            header_layout.setBackgroundResource(R.mipmap.sure_template);
            header_layout.setId(words.getW_id());
            header_layout.setGravity(Gravity.CENTER);
            main_layout.addView(header_layout);

            header_flag=true;
            words_tahaList.add(words);
        }
        else {
            words_tahaList.add(words);
            Collections.reverse(words_tahaList);

            for(int i=0;words_tahaList.size()>i;i++){
                TextView textView=new TextView(context);
               textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                       LinearLayout.LayoutParams.WRAP_CONTENT));
                textView.setText(words_tahaList.get(i).getW_text()+" ");
                textView.setTag(words_tahaList.get(i).getW_id());
                Typeface typeface=Typeface.createFromAsset(context.getAssets(),"fonts/arabicNeirizi.ttf");
                textView.setTypeface(typeface);
                textView.setTextColor(Color.parseColor("#000000"));
                header_layout.addView(textView);
            }
            words_tahaList.clear();
            header_flag=false;
        }

    }

   public void createLabelForMainWordsInOneLine(Activity context, LinearLayout main_layout, List<Words_taha> words_tahaList, int count ){

        LinearLayout linearLayout=new LinearLayout(context);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);
       linearLayout.setGravity(Gravity.CENTER);

       if(words_tahaList.size()>0) {

           main_layout.addView(linearLayout);
           Collections.reverse(words_tahaList);
           for (Words_taha w : words_tahaList) {
               DroidTextView textView = new DroidTextView(context);
               textView.setText(w.getW_text());
               textView.setTag(w.getW_id());
               textView.setTextColor(Color.parseColor("#000000"));

               if (w.getW_type() == 3) {
                   textView.setLayoutParams(new LinearLayout.LayoutParams(130, 130));
                   textView.setGravity(Gravity.CENTER);
                   textView.setBackgroundResource(R.mipmap.sore);
               } else {
                  textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                         LinearLayout.LayoutParams.WRAP_CONTENT));

               }

               linearLayout.addView(textView);

           }
           words_tahaList.clear();

       }

    }

请帮助我如何优化我的代码谢谢。

好吧,Android中有一个视图是为此特定目的提供的,例如ListViewRecyclerView等,这些视图获得Adapter对象,适配器还原数据(在您的情况下,您的200行)和listView,例如,仅创建屏幕上apear的项目,当用户向下滚动RO时,ListView创建新的视图来删除和删除Olds,这使用户在大量项目列表中享有绝佳的用途,我建议使用ListViewAdapter使用LERN,如果您必须使用自己的自定义视图,则可以从ListView延伸并以自己的方式进行操作。

您可以在此处阅读更多

如果您想要与ListView不同的特定GUI,或者您需要帮助让我知道

更新:如果您想创建自己的IMP,您会对这个方向有何看法?

public abstract class CustomBookView extends LinearLayout implements CustomBookListener {
private int pageIndex = 0;
private List<WordsTasa> wordsList;
public CustomBookView(Context context, int pageIndex, List<WordsTasa> wordsList) {
    super(context);
    this.pageIndex = pageIndex;
    this.wordsList = wordsList;
}
public abstract View createPage(WordsTasa wordsTasa);
@Override
public void goNextPage() {
    if(wordsList.size()>=pageIndex+1)
        return;
    this.removeAllViews();
    //add your animation
    this.addView(createPage(wordsList.get(++pageIndex)));
}
@Override
public void goPreviousPage() {
    if(0<pageIndex-1)
        return;
    this.removeAllViews();
    //add your animation
    this.addView(createPage(wordsList.get(--pageIndex)));
}
public int getPageIndex() {
    return pageIndex;
}
public void setPageIndex(int pageIndex) {
    this.pageIndex = pageIndex;
}
public List<WordsTasa> getWordsList() {
    return wordsList;
}
public void setWordsList(List<WordsTasa> wordsList) {
    this.wordsList = wordsList;
}
public CustomBookView(Context context, AttributeSet attrs) {
    super(context, attrs);
}
public CustomBookView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

public static class WordsTasa {
    private String words;
    public WordsTasa(String words) {
        this.words = words;
    }
    public String getWords() {
        return words;
    }
    public void setWords(String words) {
        this.words = words;
    }
}
}
 public interface CustomBookListener {
void goNextPage();
void goPreviousPage();
}

在您的下一页按钮或上一页

button.setOnClickListener(new View.OnClickListener {
public void onClick(View v) {
    customBookListener.goNextPage();
}
})

相关内容

  • 没有找到相关文章

最新更新