문제

내 목록보기를 사용하면 너무 혼란스러워 BaseAdapter 화면에서 꺼내면 각 행은 더 이상 연속적인 위치를 유지하지 않습니다. 나는 이것 외에 다른 설명을 어떻게 설명 해야할지 모르겠다.

내 BA/LV가 화면에 4 개의 항목을 표시하고 각 행의 텍스트 뷰를 표시하는 뷰를 추가하면 행 번호에 대해 0,1,2,3이 표시됩니다 (올바른). 그러나 목록을 하단 4 항목 (항목 5-8)으로 스크롤하자마자 4,5,0,1로 표시합니까 ?? 왜?? 나는 너무 혼란 스럽습니다 :/ 나는 모든 종류의 일을 시도했습니다 (심지어 비 전통적인 일조차도 이것이 제가 작동하지 않는 마지막 것입니다).

** 편집 ** 나는 내가 변화하면 그것을 발견했다.

rv = (RowView) convertView;

에게

rv =  new RowView(mContext,(cursor.getString(2)),
                        (cursor.getString(5)),
                        cursor.getString(cursor.getColumnIndex(DBHelper.KEY_IMAGEFILENAME)),
                        cursor.getString(cursor.getColumnIndex(DBHelper.KEY_CITY)),position);

그것이 작동하지만 코드를 재사용하지는 않습니다. 그래서 내가 올바른 길을 가고 있다고 생각합니다. 나는 편리한 방법을 시도했지만 생성자가 발사되기 전에 해당 값을 설정해야했기 때문에 너무 많은 도움이되지 않았습니다. 새로운 방법을 만들고 결국 그것을 발사해야합니까? 와 같은 addRow 방법? 이것은 또한 매우 느리게 스크롤하게 만듭니다.

          @Override
               public void onCreate(Bundle bundle)
               {
                 super.onCreate(bundle);
                 //setContentView(R.layout.findlist);
                 //getListView().setEmptyView(findViewById(R.id.empty));
                 mDbHelper = new DBHelper(this);
                 mDbHelper.open();
                 cursor = mDbHelper.fetchAllLocations();
                 startManagingCursor(cursor);
                 mAdapter = new myListAdapter(this);
                 setListAdapter(mAdapter);

               }
    public class myListAdapter extends BaseAdapter {
            public String testing;
            public myListAdapter(Context c) {
                mContext = c;
                // TODO Auto-generated constructor stub
            }

            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return cursor.getCount();
            }

            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return position;
            }

            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }

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


                 cursor.moveToPosition(position);
                 RowView rv;


                 if (convertView == null) {
                        rv = new RowView(mContext,(cursor.getString(2)),
                                (cursor.getString(5)),
                                cursor.getString(cursor.getColumnIndex(DBHelper.KEY_IMAGEFILENAME)),
                                cursor.getString(cursor.getColumnIndex(DBHelper.KEY_CITY)),position);
                    } else {
                        rv = (RowView) convertView;
                        try {
              // I KNOW THIS SECTION IS NOT RIGHT, BUT I HAVE BEEN MESSING IN HERE          
                        rv.setAddress(cursor.getString(2));
                        rv.setCity(cursor.getString(5));
                        rv.setFocusable(true);
                        rv.setClickable(true); }
                        catch (Exception e) {
                            rv = (RowView) convertView;
                            rv.setAddress(cursor.getString(2));
                            rv.setCity(cursor.getString(5));
                            rv.setFocusable(true);
                            rv.setClickable(true); 
                            Toast mToast;
                            mToast = Toast.makeText(FindList.this, "Error :" + e.toString() ,
                                    Toast.LENGTH_LONG);
                            mToast.show();
                        }
                    }

                 return rv;
            }

            public void addItems() {

                 //String[] from = new String[] { DBHelper.KEY_BUSINESSNAME, DBHelper.KEY_ADDRESS, DBHelper.KEY_CITY, DBHelper.KEY_GPSLONG, DBHelper.KEY_GPSLAT,  DBHelper.KEY_IMAGEFILENAME  + ""};
                 // create array of values of widgits
                 //to = new int[] { R.id.businessname, R.id.address, R.id.city, R.id.gpslong, R.id.gpslat, R.id.preview};
                 // Now create an array adapter and set it to display using our row from notes_row.xml


            }



        }


private class RowView extends LinearLayout {
        private TextView mAddress;
        private TextView mCity;
        public ImageView mArrow;
        public ImageView mPicture;
        public String mPathName;
        public String mDateTime;
        public RowView(Context context, String title, String words, String pathName, String city, int position) {
            super(context);

            this.setOrientation(HORIZONTAL);
            this.setVerticalGravity(16); //CENTER_VERTICAL 

            // Here we build the child views in code. They could also have
            // been specified in an XML file.

            //DISPLAY DELETE BUTTON
            Button mButton = new Button(context);
            mButton.setFocusable(false);
            mButton.setId(position);
            mButton.setBackgroundResource(R.drawable.delete3);
            addView(mButton, new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

            TextView mTitle;
            mTitle = new TextView(context);
            mTitle.setText(Integer.toString(position));
            addView(mTitle, new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

            this.setOrientation(HORIZONTAL);      

            try {
             Bitmap bm = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(cursor.getString(cursor.getColumnIndex(DBHelper.KEY_IMAGEFILENAME))),100, 100, true);
                mPicture = new ImageView(context);
                mPicture.setImageBitmap(bm);    
           } catch (Exception e) { 
                 mPicture = new ImageView(context);
                 mPicture.setImageResource(R.drawable.noimage);
           }     

            addView(mPicture, new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

            mArrow = new ImageView(context);
            mArrow.setBackgroundResource(R.drawable.arrowleft3);
            addView(mArrow, new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

            currentPosition = position;
            Button button = (Button)findViewById(position);
            button.setOnClickListener(mCorkyListener);

        }
도움이 되었습니까?

해결책

ConvertView를 사용할 때는 이전에 사용되었지만 더 이상 표시되지 않은보기가 표시됩니다. 현재 항목의 값으로 모든 속성을 재설정해야합니다. 그렇지 않으면, RowView 생성자에서 설정 한 모든 값은 처음 만든 값에 대해 제공 한 값으로 유지됩니다.

ListViews를 더 잘 이해하려면 제한된 RowViews 세트, 디스플레이를 채우기에 충분한 숫자와 표시 직전에 데이터로 채워질 몇 가지만 사용한다는 것을 이해해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top