0

질문에 답하고 문제에 대한 통찰력을 제공하는 모든 전문가에게 큰 감사를드립니다. 당신의 일은 높이 평가됩니다.
자, 저는 초보자이고 자바와 안드로이드를 사용하기 시작했습니다 .... 그러나 나는 그것을 좋아합니다. 둘째로,
내 코드를 용서하십시오. 그것의 내 첫 번째 안드로이드 애플 리케이션 ... 이동 vb 및 vba의 13yrs :) 그리고 그것의 많은 stackoverflow 사용자 질문 여기에서 수정됩니다.사용자 정의 어댑터를 사용하는 Gridview가 모든 결과를 표시하지 않음

배경 :
전화 로그에서 연락처 데이터 (이름 및 번호)를 표시하고자하는 gridview가 있습니다.
중복 번호를 없애기 위해 커서를 반복하고 전화 번호를 비교 한 후 CallLog.Calls.NUMBER + "ASC"로 들어오는 커서 데이터를 정렬합니다.

연락처의 이름, 번호 및 ID를 보유하고이 클래스를 ArrayList에 전달하는 자체 클래스 (ContactObj)도 만들었습니다. 결국이 ArrayList를 레이아웃 인플레이터를 사용하여 그리드를 채우는 사용자 지정 어댑터에 전달합니다.

문제 :
어떤 이유로 프로그램은 정상적으로 실행되지만 처음 10 개의 연락처가 반복해서 반복됩니다. 즉. 내 전화 기록의 총 연락처는 113 가지입니다. 그러나 그리드는 총 113 개의 처음 10 개 이상을 반복해서 표시합니다.

질문 :
질문 : "잘못된 손"으로 인해 내가 잘못 될 수 있습니다. 내 생각에 뭔가 gridview 피드를 사용자 지정 어댑터 내 구현을 함께 할 수 있습니다.

내가 디버그 할 때, mChildrenCount의 값은 디자인 모드에서 gridview의 셀 수인 11로 고정되어 있음을 알았습니다. 이 숫자에 도달 할 때마다 웬일인지 gridview는 다시 0에서 시작하여 데이터를 반복합니다. 그리드가 디자인하는 동안 표시된 셀 너머로 갈 수 있도록 일부 설정이 누락 된 것 같습니다. ... 어떤 아이디어라도? 감사합니다. . 여기

이 코드는이 연락처 정보

public class ContactObj { 
    private String ContactName; 
    private String ContactDialledNumber; 
    private String Contact_ID; 
    private String CallDate; 

    public final String getCallDate() 
    { 
     return CallDate; 
    } 

    public final void setCallDate(String callDate) 
    { 
     CallDate = callDate; 
    } 

    private int index; 
    // @return the contactName 
    public final String getContactName() 
    { 
     return ContactName; 
    } 

    // @param contactName the contactName to set 
    public final void setContactName(String contactName) 
    { 
     ContactName = contactName; 
    } 

    //@return the contactDialledNumber 

    public final String getContactDialledNumber() 
    { 
     return ContactDialledNumber; 
    } 

    //@param contactDialledNumber the contactDialledNumber to set 

    public final void setContactDialledNumber(String contactDialledNumber) 
    { 
     ContactDialledNumber = contactDialledNumber; 
    } 

    //@return the contact_ID 
    public final String getContact_ID() 
    { 
     return Contact_ID; 
    } 

    // @param contact_ID the contact_ID to set 
    public final void setContact_ID(String contact_ID) 
    { 
     Contact_ID = contact_ID; 
    } 

    //@return the index 
    public final int getIndex() 
    { 
     return index; 
    } 

    //@param index the index to set 
    public final void setIndex(int index) 
    { 
     this.index = index; 
    } 

    } 

마지막으로있는 gridview 및 유지 객체 내 정의 어댑터

public class CustomAdapter extends BaseAdapter { 
    private Context mContext; 
    private ArrayList<ContactObj> mItems; 
    public CustomAdapter(Context c, ArrayList<ContactObj> items) 
    { 
     mContext = c; 
     mItems = items; 
    } 



    public int getCount() 
    { 
     return mItems.size(); 
    } 

    public Object getItem(int position) 
    { 
     return mItems.get(position); 
    } 

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

    public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if (v == null) { 

LayoutInflater li = (LayoutInflater) 
    mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    v = li.inflate(R.layout.calllog_layout, null); 

    Log.d("Kush",String.valueOf(getCount())); 

    TextView txtContactName = (TextView)v.findViewById(R.id.txtContactName); 
    txtContactName.setText(mItems.get(position).getContactName()); 

    TextView txtNumber = (TextView)v.findViewById(R.id.txtContactNumber); 
    txtNumber.setText(mItems.get(position).getContactDialledNumber()); 

    TextView txtDate = (TextView)v.findViewById(R.id.txtCallDate); 
    txtNumber.setText(String.valueOf(position)); 

    } 

    return v; 

    } 
    public static String getDate(long milliSeconds, String dateFormat) 
    { 
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(milliSeconds); 
     return formatter.format(calendar.getTime()); 
    } 
    } 

입니다

public class CallLogActivity extends Activity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.gridview); 
    final Context myContext = CallLogActivity.this; 
    final CustomAdapter mAdapter; 

    ArrayList<ContactObj> arrToPassToGrid = new ArrayList<ContactObj>(); 

    String strNameHolder = ""; 
    String strCurrentName; 
    String strNumber; 
    String strCallDate; 
    String ID; 
    int i = 0; 
    int ComparisonResult; 

    // first find the grid 
    GridView callLogGrid = (GridView) findViewById(R.id.callLogGrid); 
    // next get the contents to display 
    Long yourDateMillis = System.currentTimeMillis()- (30 * 24 * 60 * 60 *     '    `1000); 
    Time yourDate = new Time(); 
    yourDate.set(yourDate); 
    String[] YourDateMillistring = {String.valueOf(yourDateMillis)}; 
    String formattedDate = yourDate.format("%Y-%m-%d %H:%M:%S"); 
    Time tempDate; 
    Cursor Tempcursor; 
    Cursor cursor; 

    cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, 
    new String[]{CallLog.Calls._ID, 
    CallLog.Calls.CACHED_NAME, 
    CallLog.Calls.NUMBER, 
    CallLog.Calls.DATE}, 
    null, 
    null, 
    CallLog.Calls.NUMBER + " ASC"); 


    startManagingCursor(cursor); 
    // intialize nameholder ----will be used to remove duplicate names in 

    strNameHolder = ""; 
    if (cursor.moveToFirst()) { 

       while (cursor.moveToNext()) { 
    // place contents in variables for easier reading later on; 
    strCurrentName = 
    cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)); 
     strNumber = cursor.getString(
    cursor.getColumnIndex(CallLog.Calls.NUMBER)).trim(); 
    strCallDate = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE)); 
    ID = cursor.getString(cursor.getColumnIndex(CallLog.Calls._ID)); 


      if (strCurrentName == null && strNumber == null) { 
       ComparisonResult = 0; 
      } else { 

       ComparisonResult = strNameHolder 
         .compareToIgnoreCase(strNumber); 
      } 

      if (ComparisonResult != 0) { 
       ContactObj contList = new ContactObj(); 
       contList.setIndex(i); 
       contList.setContactName(strCurrentName); 
       contList.setContactDialledNumber(strNumber); 
       contList.setContact_ID(ID); 
       contList.setCallDate(strCallDate); 
       arrToPassToGrid.add(i, contList); 

       i++; 

      } 
      strNameHolder = cursor.getString(
          cursor.getColumnIndex(CallLog.Calls.NUMBER)).trim(); 
     }; 

    }; 


    try { 
     // Collections.sort(arrToPassToGrid) 
     mAdapter = new CustomAdapter(this, arrToPassToGrid); 
     callLogGrid.setAdapter(mAdapter); 
    } catch (Exception e) 
     { 
      Log.d("Kush", e.getMessage()); 
      e.printStackTrace(); 
     } 
} 

주요 활동에 대한 코드입니다 레이아웃

,363,210
<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:gravity="center_horizontal" 
     android:id="@+id/GridItem" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:orientation="vertical" > 

     <ImageView 
      android:id="@+id/grid_item_image" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:scaleType="centerCrop" /> 

     <TextView 
      android:gravity="center_horizontal" 
      android:id="@+id/txtContactName" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="@string/contactName" 
      android:textColor="#000000" /> 
     <TextView 
      android:gravity="center_horizontal" 
      android:id="@+id/txtContactNumber" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="@string/contactNumber" 
      android:textColor="#000000" /> 
     <TextView 
      android:gravity="center_horizontal" 
      android:id="@+id/txtCallDate" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="@string/CallDate" 
      android:textColor="#000000" /> 
        </LinearLayout> 

및 GRIDVIEW

답변

0

txtContactName.setText (mItems.get (위치) .getContactName());

이 문은 if 조건 밖에 있어야합니다. viewholder usage도 한 번 확인하십시오.

아마도 해결책을 얻게 될 것입니다.

관련 문제