So drucken Sie Daten in einer Listansicht mit Listadapter in einer Listansicht
-
23-10-2019 - |
Frage
Aktualisiert
Ich versuche, die aus der Datenbank abgerufenen Daten in einer Listenansicht zu drucken. Für eine Weile druckte meine Anwendung für jede Daten in der Datenbank eine Zeile in der Listenansicht. Wenn also 10 Daten in der Datenbank vorhanden sind, druckt die App 10 Zeilen, die jeder Zeile der Datenbank entsprechen. Hier ist eine Ansicht, wie es gedruckt wird.
Das neue Bild, wie es jetzt aussieht:
Aber es ist nicht so, dass die Daten so gedruckt werden, wie ich möchte. Ich möchte eine Spalte der Zeile in einer bestimmten Textansicht drucken, aber sie zeigt nichts.
Die Aktivität bewertet die Methode ruft also die Methode auf selectTopCalls()
und erstellt eine Liste, die die Liste empfängt, die diese Methode zurückgibt. Und dann übergeben ich diese Liste an den Listadapter.
Nun, ich habe diese Aktivität benannt Bewertetcalls.java:
public class RatedCalls extends Activity {
private static final String LOG_TAG = "RatedCalls";
private CallDataHelper cdh;
private ListView listview;
private ArrayList<String> ratedCallsList;
private MyListAdapter listAdapter;
private View view;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(LOG_TAG, "calling from onCreate()");
cdh = new CallDataHelper(this);
startService(new Intent(this, RatedCallsService.class));
setBasicContent();
}
public void setBasicContent() {
listview = (ListView) findViewById(R.id.list_view);
ratedCallsList = this.cdh.selectTopCalls();
Log.i(LOG_TAG, "ratedCallsList size: " + ratedCallsList.size());
listAdapter = new MyListAdapter(this, this, R.id.list_view, ratedCallsList);
listview.setAdapter(listAdapter);
}
}
Ich habe diese Klasse, eine Listenadapterklasse mit dem Namen MyListadapter.java:
public class MyListAdapter extends ArrayAdapter { //--CloneChangeRequired
private ArrayList mList;
private Context mContext;
private Activity mActivity;
private int selectedPos = -1; // init value for not-selected
private ArrayList<String> ratedCallsList;
private CallDataHelper cdh;
public void setSelectedPosition(int pos){
selectedPos = pos;
notifyDataSetChanged();
}
public int getSelectedPosition(){
return selectedPos;
}
public MyListAdapter(Context context, Activity activity, int textViewResourceId, ArrayList list) {
super(context, textViewResourceId, list);
this.mList = list;
this.mContext = context;
this.mActivity = activity;
}
public View getView(int position, View convertView, ViewGroup parent){
View view = convertView;
try{
if (view == null) {
LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.list_item, null); // --CloneChangeRequired(list_item)
}
// setting STRIP BG
if(position == selectedPos){
view.findViewById(R.id.rlt_main).setBackgroundColor( Color.rgb(062, 076, 120) );
}else if(position%2==0){
view.findViewById(R.id.rlt_main).setBackgroundColor( Color.rgb(226, 231, 239) );
}else{
view.findViewById(R.id.rlt_main).setBackgroundColor( Color.rgb(200, 210, 223) );
}
setViews(position, view);
}catch(Exception e){
//Log.i(MyListAdapter.class.toString(), e.getMessage());
}
return view;
}
public void setViews(int position, View view) {
cdh = new CallDataHelper(mContext);
if(mContext.getClass().equals((RatedCalls.class))){
ratedCallsList = this.cdh.selectTopCalls();
Log.i("MYLISTADAPTER", "size " + ratedCallsList.size());
if (ratedCallsList != null) {
((TextView) view.findViewById(R.id.contact_name)).setText(ratedCallsList.get(0));
((TextView) view.findViewById(R.id.phone_number)).setText(ratedCallsList.get(1));
((TextView) view.findViewById(R.id.duration)).setText(ratedCallsList.get(2));
((TextView) view.findViewById(R.id.date)).setText(ratedCallsList.get(3));
}
}else if(mContext.getClass().equals(RatedContacts.class)){
final PublishersBO listPublisher = (PublishersBO) mList.get(position);
if (listPublisher != null) {
//--setting list_item views
((TextView) view.findViewById(R.id.contact_name)).setText(listPublisher.getName());
((TextView) view.findViewById(R.id.phone_number)).setText(listPublisher.getEmail());
//--onClickListener
view.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent myIntent = new Intent(mContext,RatedContacts.class);
myIntent.putExtra("NAME", listPublisher.getName());
myIntent.putExtra("ACTIVITY_NAME", mContext.getClass().toString());
mContext.startActivity(myIntent);
mActivity.finish();
}
});
}
}
}
}
Die Methode, die die Daten aus der Datenbank abrufen, befindet sich in einer getrennten Klasse, die sich mit der SQLite -Funktion befasst. Dies ist die Methode:
public ArrayList<String> selectTopCalls() {
ArrayList<String> list1 = new ArrayList<String>();
Cursor cursor = this.db.query(TABLE_NAME, null, null, null, null, null,
"duration desc");
if (cursor.moveToFirst()) {
do {
//if (cursor.getString(2) != "") {
cdObj = new CallData();
list1.add(cursor.getString(2));
list1.add(cursor.getString(4));
list1.add(cursor.getString(5));
list1.add(cursor.getString(6));
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
return list1;
}
Und hier ist die XML -Datei für die genannte Ansicht list_item.xml:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="67px"
android:id="@+id/rlt_main"
android:layout_toRightOf="@+id/iv_forward">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:id="@+id/iv_forward"
android:src="@drawable/icon"
android:layout_alignParentLeft="true">
</ImageView>
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/phone_number"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/iv_forward"
android:layout_alignBottom="@+id/iv_forward">
</TextView>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/duration"
android:layout_alignBottom="@+id/phone_number"
android:layout_alignRight="@+id/phone_number"
>
</TextView>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/date"
android:layout_alignBottom="@+id/contact_name"
android:layout_alignRight="@+id/contact_name"
>
</TextView>
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/contact_name"
android:textSize="20px"
android:layout_toRightOf="@+id/iv_forward"
android:layout_alignParentTop="true">
</TextView>
Daher möchte ich die Daten in den Textansichten in der Aktivität drucken, aber ich weiß nicht, wo ich den Text festlegen soll, in welcher Klasse, wenn in der MyListadapter -Klasse oder in der Aktivität.
Vielen Dank.
Lösung
Ich habe nur wenige Änderungen an Ihrem Code vorgenommen, hier überprüfen.
https://gist.github.com/683b84af9d01bf18fe3d
Vielen Dank.........