首先非常感謝所有回答問題並提供洞察挑戰的專家。感謝您的工作。
現在,我是一個新手,剛開始使用Java和Android ....但我很喜歡它。 其次,
請原諒我的代碼。它是我的第一個Android應用程序...從13年的vb和vba開始:)而且它的大部分內容都是從用戶的問題修改過來的。Gridview使用自定義適配器不顯示所有結果
背景:
我有一個gridview,我想從通話記錄中顯示聯繫人數據(姓名和號碼)。
爲了消除重複的數字,我循環遍歷遊標並比較電話號碼,當然,通過CallLog.Calls.NUMBER +「ASC」對傳入的遊標數據進行排序;
我也創建了我自己的類(ContactObj),它包含聯繫人的姓名,號碼和ID,並將此類傳遞給ArrayList。最終我將這個ArrayList傳遞給一個自定義的適配器,它使用佈局充氣器來填充網格。
問題:
出於某種原因,程序運行正常,但前十個聯繫人一遍又一遍地重複。即。我的手機日誌上的總聯繫人數是113。然而網格只顯示總共113次的前10次。
問題:
也許這個「老手」在這可能指向我在哪裏我會出錯?我猜是與我的實施提供gridview的自定義適配器的事情。
當我調試時,注意到mChildrenCount的值固定爲11,這是設計模式下gridview中單元格的數量。出於某種原因,每當這個數字達到時,gridview再次從0開始,並重複數據。似乎我錯過了一些設置,以允許網格超出設計期間顯示的單元格。 ...任何想法的人? 謝謝。
這裏的主要活動代碼
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();
}
}
此代碼是我的自定義適配器
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 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和對象佈局
<?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