Desidero modificare i colori di sfondo della riga selezionata nel mio ListView che dalla lettura devo estendere con un CustomAdapter. Il mio adattatore principale è del tipo SimpleCursorAdapter, quindi ho modificato un CustomAdapter che ha esteso ArrayAdapter a SimpleCursorAdapter.Listview e CustomAdapter che estendono SimpleCursorAdapter
Il mio problema è che il listview è vuoto quando si utilizza CustomAdapter ma se non si estende e non si usa SimpleCursorAdapter il listview ha righe/elementi. Logcat mostra un problema nel mio CustomAdapter vedi sotto.
Questo è il mio codice attività principale:
phrasesdb helper = new phrasesdb(this);
database = helper.getWritableDatabase();
data = database.query("phrases", fields, null, null, null, null, fields[0] + " COLLATE NOCASE ASC");
//WORKING SimpleCursorAdapter
//dataSource = new SimpleCursorAdapter(this, R.layout.phrases, data, fields, new int[] { R.id.phrase });
//NOT WORKING
dataSource = new CustomAdapter(this, R.layout.phrases, data, fields, new int[] { R.id.phrase });
view = getListView();
setListAdapter(dataSource);
Questa è la classe adattatore personalizzato e ho segnato la posizione in cui gli errori logcat:
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class CustomAdapter extends SimpleCursorAdapter {
protected static final int NO_SELECTED_COLOR = 0xFF191919;
protected static final int SELECTED_COLOR = 0xFF3366CC;
Cursor items;
private LayoutInflater mInflater;
private int viewResourceId;
private int selectedPosition;
public CustomAdapter(Context context, int resourceId, Cursor data, String[] fields, int[] is) {
super(context, resourceId, data, fields, is);
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
viewResourceId = resourceId;
items = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = (TextView)convertView;
if (tv == null) {
//WHEN DEBUGGING THIS IS WHERE LOGCAT ERROR MESSAGES STARTS
tv = (TextView)mInflater.inflate(viewResourceId, null);
}
tv.setText(items.getString(position));
// Change the background color
if (position==selectedPosition) tv.setBackgroundColor(SELECTED_COLOR);
else tv.setBackgroundColor(NO_SELECTED_COLOR);
return tv;
}
public void setSelected(int position) {
selectedPosition = position;
}
}
e questo è LogCat:
10-18 13: 33: 17,869: E/ListView (28378): android.widget.LinearLayout 10-18 13: 33: 17,869: E/List Visualizza (28378): java.lang.ClassCastException: android.widget.LinearLayout 10-18 13: 33: 17.869: E/ListView (28378): su com.xxx.xxx.CustomAdapter.getView (CustomAdapter.java:49) 10-18 13: 33: 17,869: E/ListView (28378): su android.widget.AbsListView.obtainView (AbsListView.java:1449) 10-18 13: 33: 17,869: E/ListView (28378): a android.widget.ListView.makeAndAddView (ListView.java:1801) 10-18 13: 33: 17.869: E/ListView (28378): su android.widget.ListView.fillSpecific (ListView.java:1339) 10-18 13: 33: 17.869: E/ListView (28378): su android.widget.ListView.layoutChildren (ListView.java:1637) 10-18 13: 33: 17.869: E/ListView (28378): su android.widget. AbsListView.onLayout (AbsListView.java:1279) 10-18 13: 33: 17.869: E/ListView (28378): su android.view.View.layout (View.java:7321) 10-18 13: 33: 17.869: E/ListView (28378): su android.widget.FrameLayout.onLayout (FrameLayout.java:338) 10-18 13: 33: 17.869: E/ListView (28378): in android.view.View.layout (View.java:7321) 10-18 13: 33: 17.869: E/ListView (28378): su android.widget.FrameLayout.onLayout (FrameLayout.java:338) 10-18 13: 33: 17.869: E/ListView (28378): su android.view.View.layout (View.java:7321) 10-18 13: 33: 17.869: E/ListView (28378): su android.view. ViewRoot.performTraversals (ViewRoot.java:1217) 10-18 13: 33: 17.869: E/ListView (28378): su android.view.ViewRoot.handleMessage (ViewRoot.java:1991) 10-18 13:33: 17.869: E/ListView (28378): su android.os.Handler.dispatchMessage (Handler.java:99) 10-18 13: 33: 17.869: E/ListView (28378): su android.os.Looper.loop (Looper.java:150) 10-18 13: 33: 17.869: E/ListView (28378): su android.app.ActivityThread.main (ActivityThread.java:4385) 10-18 13: 33: 17.869: E/ListView (28378): in java.lang.reflect.Method.invokeNative (Native Method) 10-18 13: 33: 17.869: E/ListView (28378): a java.lang.reflect.Method.invoke (Method.java:507) 10- 18 13: 33: 17.869: E/ListView (28378): a com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:849) 10-18 13: 33: 17.869: E/ListView (28378): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:607) 10-18 13: 33: 17.869: E/ListView (28378): in dalvik.system.NativeStart.principale (Native Method)
Questo è il layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/rowLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal">
<TextView
android:id="@+id/phrase"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="@string/wordforphrases"
android:textAppearance="?android:attr/textAppearanceMedium"
android:visibility="visible"/>
</LinearLayout>
Logcat sta indicando qualcosa a che fare con LinearLayout ma non riesco a capire dove ho sbagliato.
Per favore qualcuno potrebbe essere in grado di indicarmi la giusta direzione?
grazie Mark
Aggiornamento: Dopo aver cambiato per abbinare gonfiare come per l'idea di Sardor (Grazie):
tv = (TextView)mInflater.inflate(viewResourceId, parent);
ora ottengo questo errore
10-18 15:23:22.083: E/ListView(28931): addView(View, LayoutParams) is not supported in AdapterView
10-18 15:23:22.083: E/ListView(28931): java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
10-18 15:23:22.083: E/ListView(28931): at android.widget.AdapterView.addView(AdapterView.java:461)
10-18 15:23:22.083: E/ListView(28931): at android.view.LayoutInflater.inflate(LayoutInflater.java:416)
10-18 15:23:22.083: E/ListView(28931): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-18 15:23:22.083: E/ListView(28931): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-18 15:23:22.083: E/ListView(28931): at com.xxx.xxx.CustomAdapter.getView(CustomAdapter.java:36)
10-18 15:23:22.083: E/ListView(28931): at android.widget.AbsListView.obtainView(AbsListView.java:1449)
10-18 15:23:22.083: E/ListView(28931): at android.widget.ListView.makeAndAddView(ListView.java:1801)
10-18 15:23:22.083: E/ListView(28931): at android.widget.ListView.fillSpecific(ListView.java:1339)
10-18 15:23:22.083: E/ListView(28931): at android.widget.ListView.layoutChildren(ListView.java:1637)
10-18 15:23:22.083: E/ListView(28931): at android.widget.AbsListView.onLayout(AbsListView.java:1279)
10-18 15:23:22.083: E/ListView(28931): at android.view.View.layout(View.java:7321)
10-18 15:23:22.083: E/ListView(28931): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-18 15:23:22.083: E/ListView(28931): at android.view.View.layout(View.java:7321)
10-18 15:23:22.083: E/ListView(28931): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-18 15:23:22.083: E/ListView(28931): at android.view.View.layout(View.java:7321)
10-18 15:23:22.083: E/ListView(28931): at android.view.ViewRoot.performTraversals(ViewRoot.java:1217)
10-18 15:23:22.083: E/ListView(28931): at android.view.ViewRoot.handleMessage(ViewRoot.java:1991)
10-18 15:23:22.083: E/ListView(28931): at android.os.Handler.dispatchMessage(Handler.java:99)
10-18 15:23:22.083: E/ListView(28931): at android.os.Looper.loop(Looper.java:150)
10-18 15:23:22.083: E/ListView(28931): at android.app.ActivityThread.main(ActivityThread.java:4385)
10-18 15:23:22.083: E/ListView(28931): at java.lang.reflect.Method.invokeNative(Native Method)
10-18 15:23:22.083: E/ListView(28931): at java.lang.reflect.Method.invoke(Method.java:507)
10-18 15:23:22.083: E/ListView(28931): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
10-18 15:23:22.083: E/ListView(28931): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
10-18 15:23:22.083: E/ListView(28931): at dalvik.system.NativeStart.main(Native Method)
10-18 15:23:22.093: D/View(28931): onTouchEvent: viewFlags: 0x18244001
Durante il controllo genitore è vedere il TextView.
Altri pensieri per favore?
Grazie, dopo aver modificato la corrispondenza, gonfiare: 'codice' tv = (TextView) mInflater.inflate (viewResourceId, parent); – Mark