My ListView is not displayed in Widget

0

First of all, it is the first time I do a Widget . I'm probably doing the process wrong, so I ask for help, having said that, I'm going with my problem.

In my main class, MainActivity I have a ListView that I'm filling with my Sqlite and everything works perfectly, but I want to do Widget with that ListView but my Widget shows nothing, as if the layout was empty.

In MainActivity I have it that way and it works perfectly:

public class MainActivity extends AppCompatActivity {

    private DatabaseHandler baseDatos;
    private ImagenAdapter cursorAdapter;
    private ListView listViewPersonas;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listViewPersonas = (ListView) findViewById(R.id.listViewPersonas);

        // Se recuperan todas las personas de la base de datos
        recuperarTodasPersonas();
    }

    private void recuperarTodasPersonas() {
        try{
            baseDatos = new DatabaseHandler(this);
            // Devuelve todas las personas en el objeto Cursor.
            Cursor cursor = baseDatos.obtenerTodasPersonas();
            String[] from = new String[]{
                    "nombre",
                    "nombre1",
                    "nombre2",
                    "nombre3",
                    "nombre4",
                    "ruta_imagen"
            };
            int[] to = new int[]{
                    R.id.persona_nombre,
                    R.id.persona_nombre1,
                    R.id.persona_nombre2,
                    R.id.persona_nombre3,
                    R.id.persona_nombre4,
                    R.id.foto_gallery,
            };
            cursorAdapter = new ImagenAdapter(this, cursor, from, to);
            listViewPersonas.setAdapter(cursorAdapter);
        }finally{
            baseDatos.cerrar();
        }
    }
}

And so I've done it in my AppWidgetProvider :

public class WidgetProvider extends AppWidgetProvider {

    private DatabaseHandler baseDatos;
    private ImagenAdapter cursorAdapter;
    private static Context mContext;
    private ListView listViewPersonas;

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);

        // mi listview

        RemoteViews remoteViews1 = new RemoteViews(context.getPackageName(), R.id.listViewPersonas);

        // Se recuperan todas las personas de la base de datos

        recuperarTodasPersonas();

        // abre MainActivity al hacer clic en el Widget

        Intent configIntent = new Intent(context, MainActivity.class);
        PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
        remoteViews.setOnClickPendingIntent(R.id.widget_principal, configPendingIntent);
        appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
    }

    private void recuperarTodasPersonas() {
        try {
            baseDatos = new DatabaseHandler(mContext);
            // Devuelve todas las personas en el objeto Cursor.
            Cursor cursor = baseDatos.obtenerTodasPersonas();
            String[] from = new String[]{
                    "nombre",
                    "nombre1",
                    "nombre2",
                    "nombre3",
                    "nombre4",
                    "ruta_imagen"
            };
            int[] to = new int[]{
                    R.id.persona_nombre,
                    R.id.persona_nombre1,
                    R.id.persona_nombre2,
                    R.id.persona_nombre3,
                    R.id.persona_nombre4,
                    R.id.foto_gallery,
            };
            cursorAdapter = new ImagenAdapter(mContext, cursor, from, to);
            listViewPersonas.setAdapter(cursorAdapter);
        } finally {
            baseDatos.cerrar();
        }
    }
}

AndroidManifest

...

  <receiver android:name=".WidgetProvider" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/widget_info" />
        </receiver>

...

xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="120dp"
    android:minHeight="60dp"
    android:initialLayout="@layout/widget"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen|keyguard"
    android:previewImage="@drawable/ic_launcher">
</appwidget-provider>

But as I said above, in my Widget there is no trace of ListView and I do not know what can be done.

Someone who can tell me what I do wrong and how to fix it?

Thank you!

    
asked by UserNameYo 22.03.2017 в 00:44
source

1 answer

0

Look to see if this works for you:

I have attached the AndroidManifest.xml code:

<receiver android:name=".WidgetProvider" >
            <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/widget_info" />
    </receiver>
    <service android:name=".WidgetService"
    android:permission="android.permission.BIND_REMOTEVIEWS" />

I attached a link to a project in GitHub of a listView in a Widget, I hope it works for you.

Link: ListView + Widget Project

    
answered by 22.03.2017 в 16:47