您好我是android和java的新手,目前正在尝试在我的应用程序中实现ListView。我现在的问题是我的数据源有两个项目,但由于某种原因,第一个项目重复两次。
这是我的CursorAdapter:
package com.xxxxxx.eventmanager;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ResourceCursorAdapter;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by djoks on 15/03/2016.
*/
public class EventCursorAdapter extends ResourceCursorAdapter {
private Context mContext;
public EventCursorAdapter(Context context, int layout, Cursor c, int flags) {
super(context, layout, c, flags);
mContext = context;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.list_events, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
JSONObject dump = new JSONObject();
try {
dump = new JSONObject(cursor.getString(cursor.getColumnIndex("dump")));
Typeface Anton = Typeface.createFromAsset(mContext.getAssets(), "fonts/Anton.ttf");
TextView dateDayView = (TextView) view.findViewById(R.id.dateDay);
dateDayView.setTypeface(Anton);
dateDayView.setText(dump.getJSONObject("date_parts").getString("date"));
TextView dateMonthView = (TextView) view.findViewById(R.id.dateMonth);
dateMonthView.setTypeface(Anton);
dateMonthView.setText(dump.getJSONObject("date_parts").getString("month"));
TextView dateEventTitleView = (TextView) view.findViewById(R.id.eventTitle);
dateEventTitleView.setText(dump.getString("name"));
TextView noAvailableTicketsView = (TextView) view.findViewById(R.id.noAvailableTickets);
noAvailableTicketsView.setText("Available Tickets " + dump.getString("no_of_available_tickets"));
TextView salesEndDateView = (TextView) view.findViewById(R.id.salesEndDate);
salesEndDateView.setText("Sales End Date: " + dump.getString("sales_end_date"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
这是我的ListView的XML模板:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/layoutPadding"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/dateDay"
android:capitalize="characters"
android:textStyle="bold"
android:textSize="30dp"
android:textColor="@color/colorPrimary" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:layout_below="@+id/dateDay"
android:id="@+id/dateMonth"
android:textColor="@color/colorPrimaryText"
android:textStyle="bold"
android:textIsSelectable="false" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/eventTitle"
android:layout_marginTop="5dp"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/dateDay"
android:textStyle="bold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Small Text"
android:id="@+id/salesEndDate"
android:layout_toRightOf="@+id/dateMonth"
android:layout_below="@+id/eventTitle"
android:layout_marginLeft="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Small Text"
android:id="@+id/noAvailableTickets"
android:layout_toRightOf="@+id/dateMonth"
android:layout_below="@+id/salesEndDate"
android:layout_marginLeft="10dp"/>
</RelativeLayout>
现在在我的MainActivity.java onCreate方法中,我有以下代码:
mUpdater = new UpdaterModel(getApplicationContext());
// mUpdater.open();
Cursor c = mUpdater.getEventCursor();
EventCursorAdapter adapter = new EventCursorAdapter(
this, R.layout.list_events, c, 0 );
// mUpdater.close();
ListView eventListView = (ListView) findViewById(R.id.eventListView);
eventListView.setAdapter(adapter);
现在,第一项不仅重复两次,而且在更新数据源时ListView不会自动更新。
这是我的 activity_main.xml ,其中包含ListView:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:id="@+id/mainActivityLayout"
tools:context="com.xxxxxx.eventmanager.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/toolbarContainer"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/eventListView"
android:layout_centerHorizontal="true"
android:layout_below="@+id/toolbarContainer" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
<!--<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Toast Events Data"
android:id="@+id/button"
android:layout_below="@+id/eventListView"
android:layout_alignLeft="@+id/fab"
android:layout_alignStart="@+id/fab"
android:onClick="logEventsTask"/>-->
</android.support.design.widget.CoordinatorLayout>