2017-12-27 40 views
0

エレメントリストを追加するボタン付きのカスタムリストビューがある しかし、アプリケーションクラッシュを追加して要素を追加すると、要素が追加されるそれはスクロール時にリストビューの遅れがあり、アイテムを追加するとクラッシュする

と私は

私が使用するカスタムアダプタ)

class CustomAdapter extends BaseAdapter { 

    ArrayList<ListItem> listItems = new ArrayList<ListItem>(); 

    CustomAdapter(ArrayList<ListItem> list){ 
     this.listItems = list; 
    } 

    @Override 
    public int getCount() { 
     return listItems.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return listItems.get(position).name; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int i, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = getLayoutInflater(); 
     View view = inflater.inflate(R.layout.list_item,null); 

     TextView name = (TextView) view.findViewById(R.id.name); 
     TextView lastm = (TextView) view.findViewById(R.id.last); 
     TextView time = (TextView) view.findViewById(R.id.time); 
     CircleImageView pic= (CircleImageView) view.findViewById(R.id.pic); 

     name.setText(listItems.get(i).name); 
     lastm.setText(listItems.get(i).lastm); 
     time.setText(listItems.get(i).time); 
     Bitmap bmp = BitmapFactory.decodeByteArray(listItems.get(i).pic,0,listItems.get(i).pic.length); 
     pic.setImageBitmap(bmp); 




     return view; 
    } 
} 

をクラッシュしないと、私は要素を追加したときにアプリが

add.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        EditText editText=(EditText) mView.findViewById(R.id.name); 
        String name=editText.getText().toString(); 
        boolean result=myDataBase.insertData(imageViewToByte(img),name,"no messages yet",""); 
        if (result) { 
         Toast.makeText(Main2Activity.this, "Saved in DATABASE", Toast.LENGTH_SHORT).show(); 
         viewLastData(); 
         dialog.dismiss(); 
        } 
をcrashs
+0

"クラッシュ" ..;あなたはそのようなクラッシュのスタックトレースを持っていますか? – Stultuske

+0

xmlコードを追加できますか? –

+0

Stulktuske私はあなたを得ることができません、 "stacktrace?" –

答えて

0

リストビューののレイアウト番号wrap_contentを使用したため、リストビューの表示が遅れている場合です。これは、ListView内のすべての項目をカウントするように強制し、パフォーマンスに大きな影響を与えます。

wrap_contentmatch_parentに置き換えて、これらの遅延を避けてください。

編集AdapterでもViewHolderパターンを使用してください。this linkを参照してください。ここで

は一例です:

// ViewHolder Pattern 
private static class ViewHolder { 
    TextView name, status; 
} 

@Override @NonNull 
public View getView(int position, View convertView, @NonNull ViewGroup parent) { 
    ViewHolder holder; 

    if (convertView == null) { 
     LayoutInflater vi = LayoutInflater.from(getContext()); 
     convertView = vi.inflate(R.layout.list_item, parent, false); 

     holder = new ViewHolder(); 
     holder.name = (TextView) convertView.findViewById(R.id.text_name); 
     holder.status = (TextView) convertView.findViewById(R.id.another_text); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    // Then do the other stuff with your item 
    // to populate your listView 
    // ... 

    return convertView 
} 
+0

私はそれをmatch_parentに変更しましたが、私はまだ同じ問題を抱えています –

+0

私のanwserも編集しました –

関連する問題