2016-03-30 5 views
-1

Ich versuche, eine Art von Spiel mit Android Studio zu erstellen. Bis jetzt habe ich eine Gridview gemacht, die Spieler in einer Datenbank anzeigt. Ich hatte einige Probleme mit gridView.setOnItemClickListener, ich musste es machen, indem ich den Code in die adparter.class von gridView setze. Wenn Sie also wissen, wie ich das in die Aktivität von gridView tun kann, sagen Sie es mir bitte.PopUp Fenster nicht Datenbank aktualisieren - Android

Mein Problem ist jetzt, dass wenn Sie auf einen Player klicken, erscheint ein Popup-Fenster, in dem Sie den Spielernamen oder sein Genre ändern können. Wenn Sie auf Bestätigen klicken, wird die Datenbank automatisch aktualisiert, aber es funktioniert nicht. Ich habe versucht, es Schritt für Schritt mit Toast zu tun, um zu wissen, ob es den Teil oder nicht laufen, das Problem könnte der Kontext sein, aber vielleicht bin ich verrückt.

Ich habe Ihnen ein paar Bilder und den zugehörigen Code hinterlassen.

Gridview des pic ->http://i.stack.imgur.com/GO4ms.png

PopUp windos der pic ->http://i.stack.imgur.com/aAvcm.png

gridview der Adapterklasse

package es.fingerlabs.gamecohol; 

import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.LinearLayout; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class AdaptadorAmigos extends BaseAdapter { 

    private Context context; 
    private ArrayList<Amigo> misAmigos = new ArrayList<Amigo>(); 

    public AdaptadorAmigos(ArrayList<Amigo> list, Context context) { 
    this.misAmigos = list; 
    this.context = context; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 

     View gridView = convertView; 
     if (gridView == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     gridView = inflater.inflate(R.layout.item_amigo, null); 
    } 

    TextView TextoNombreJugador = (TextView)gridView.findViewById(R.id.tvNombreAmigo); 
    TextoNombreJugador.setText(misAmigos.get(position).getNombre()); 

    //Handle buttons and add onClickListeners 
    ImageButton deleteBtn = (ImageButton)gridView.findViewById(R.id.btEliminarAmigo); 

    deleteBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //do something 
      AmigosSQLiteHelper amigosdbh = new AmigosSQLiteHelper(context, "DBAmigos", null, 1); 
      SQLiteDatabase db = amigosdbh.getWritableDatabase(); 
      db.delete("Amigos", "id_amigo="+misAmigos.get(position).getId(), null); 
      misAmigos.remove(position); //or some other task 
      //Eliminar de la base de datos ************** 
      notifyDataSetChanged(); 
     } 
    }); 

    // ******* THIS IS WHAT I REFER TO PUT IT ON GRIDVIEW'S ACTIVITY ******* 

    gridView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Toast.makeText(context,"Id "+misAmigos.get(position).getId()+" Vidas "+misAmigos.get(position).getVidas(), Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(context, VistaAmigo.class); 
      intent.putExtra("Id", (misAmigos.get(position).getId())); 
      intent.putExtra("Nombre", (misAmigos.get(position)).getNombre()); 
      intent.putExtra("Genero", (misAmigos.get(position)).getGenero()); 
      context.startActivity(intent); 
     } 
    }); 

    return gridView; 
} 

@Override 
public int getCount() { 
    return misAmigos.size(); 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 
} 

Gridview Klasse

package es.fingerlabs.gamecohol; 

import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.GridView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class SeleccionarAmigos extends AppCompatActivity { 

    private ArrayList<Amigo> misAmigos; 
    private GridView gridView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_amigos); 
     gridView = (GridView) findViewById(R.id.gvAmigos); 
     refrescarLista(); 

    /* IF I PUT THAT HERE IT DOES NOTHING 

     gridView.setOnItemClickListener(new OnItemClickListener() { 
     @Override public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) { 
      Toast.makeText(getApplicationContext(),misAmigos.get(position).getNombre(), Toast.LENGTH_SHORT).show(); 
     } 
    });*/ 

    /*gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // get the data to pass to the activity based on the position clicked 
      Intent intent = new Intent(SeleccionarAmigos.this, VistaAmigo.class); 
      intent.putExtra("Id", (misAmigos.get(position).getId())); 
      intent.putExtra("Nombre", (misAmigos.get(position)).getNombre()); 
      intent.putExtra("Genero", (misAmigos.get(position)).getGenero()); 
      startActivity(intent); 
     } 
    });*/ 

} 

public void obtenerAmigos(){ 
    misAmigos = new ArrayList<Amigo>(); 
    AmigosSQLiteHelper amigosdbh = new AmigosSQLiteHelper(this, "DBAmigos", null, 1); 
    SQLiteDatabase db = amigosdbh.getReadableDatabase(); 
    Cursor c = db.rawQuery(" SELECT Id_amigo,Nombre,Genero FROM Amigos ", null); 
    //Nos aseguramos de que existe al menos un registro 
    if (c.moveToFirst()) { 
     //Recorremos el cursor hasta que no haya más registros 
     do { 
      int id = c.getInt(0); 
      String nombre= c.getString(1); 
      String genero= c.getString(2); 
      Amigo nuevoAmigo = new Amigo(nombre,genero,null); 
      nuevoAmigo.setId(id); 
      this.misAmigos.add(nuevoAmigo); 
     } while(c.moveToNext()); 
    } 
    db.close(); 
} 

public void refrescarLista(){ 
    obtenerAmigos(); 
    AdaptadorAmigos adapter = new AdaptadorAmigos(misAmigos, this); 
    gridView.setAdapter(adapter); 
} 

} 

PopUp Fenster Klasse

package es.fingerlabs.gamecohol; 

import android.app.Activity; 
import android.content.ContentValues; 
import android.content.Context; 
import android.content.Intent; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.PopupWindow; 
import android.widget.Toast; 

public class VistaAmigo extends Activity { 

private int id; 
private String nombre; 
private String genero; 

private EditText etNombre; 
private EditText etGenero; 
private Button btConfirmar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_vistaamigo); 

    etNombre = (EditText) findViewById(R.id.etNombreVistaAmigo); 
    etGenero = (EditText) findViewById(R.id.etGeneroVistaAmigo); 
    btConfirmar = (Button) findViewById(R.id.btConfirmarAmigo); 

    Intent i = getIntent(); 
    i.getIntExtra("Id", id); 
    nombre = i.getStringExtra("Nombre"); 
    genero = i.getStringExtra("Genero"); 

    etNombre.setHint(nombre); 
    etGenero.setHint(genero); 

    btConfirmar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AmigosSQLiteHelper amigosdbh = new AmigosSQLiteHelper(VistaAmigo.this, "DBAmigos", null, 1); 
      SQLiteDatabase db = amigosdbh.getWritableDatabase(); 
      ContentValues valores = new ContentValues(); 
      valores.put("nombre", etNombre.getText().toString()); 
      valores.put("genero", etGenero.getText().toString()); 
      db.update("Amigos", valores, "id_amigo="+id, null); 
      Toast.makeText(VistaAmigo.this.getBaseContext(),"Nombre: "+etNombre.getText().toString()+" Genero: "+etGenero.getText().toString()+ 
      "Cambios realizados",Toast.LENGTH_LONG); 
     } 
    }); 
} 

}

gridview Layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/fondogamecohol"> 

<GridView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/gvAmigos" 
    android:layout_gravity="center_horizontal" 
    android:numColumns="auto_fit" 
    android:layout_margin="10dp" 
    android:verticalSpacing="20dp" 
    android:horizontalSpacing="20dp" /> 
</LinearLayout> 

Gridview Stück Layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="@drawable/rounded_corners_white" 
android:id="@+id/lyItemAmigo"> 

<ImageView 
    android:layout_width="124dp" 
    android:layout_height="95dp" 
    android:id="@+id/ivFotoAmigo" 
    android:background="#d8d8d8" 
    android:layout_marginTop="10dp" 
    android:layout_marginLeft="12dp" 
    android:layout_marginRight="12dp" 
    android:clickable="false" 
    android:src="@drawable/ic_tag_faces_white_36dp" /> 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:text="Chrisitan" 
    android:id="@+id/tvNombreAmigo" 
    android:layout_gravity="center" 
    android:textColor="#333333" 
    android:textStyle="bold" 
    android:textSize="18dp" 
    android:layout_marginTop="5dp" 
    android:layout_marginRight="12dp" 
    android:clickable="false" 
    android:layout_marginLeft="14dp" /> 

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:layout_marginBottom="10dp" 
    android:layout_marginLeft="10dp" 
    android:gravity="right" 
    android:id="@+id/lyBotonesAmigo" 
    android:layout_marginTop="5dp" 
    android:layout_marginRight="12dp"> 

    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btEditarAmigo" 
     android:clickable="false" 
     android:background="@drawable/ic_edit_black_18dp" /> 

    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btEliminarAmigo" 
     android:clickable="false" 
     android:background="@drawable/ic_delete_forever_black_18dp" /> 
</LinearLayout> 
</LinearLayout> 

PopUp Fenster-Layout

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:theme="@style/PopUp1"> 

<LinearLayout 
    android:layout_width="300dp" 
    android:layout_height="300dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:background="@drawable/rounded_corners_white" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Modificar amigo" 
     android:id="@+id/tvModificarAmigo" 
     android:layout_gravity="center_horizontal" 
     android:background="#c9ed5a" 
     android:gravity="center_vertical|center_horizontal" 
     android:textStyle="bold" 
     android:textColor="#ffffff" /> 

    <RelativeLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Nombre: " 
      android:id="@+id/tvNombreVistaAmigo" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginStart="28dp" 
      android:layout_marginTop="51dp" 
      android:textStyle="bold" 
      android:textColor="#333333" 
      android:textSize="20dp" /> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/etNombreVistaAmigo" 
      android:layout_marginStart="10dp" 
      android:hint="Jugador 1" 
      android:textColorHint="#333333" 
      android:textColor="#333333" 
      android:textStyle="bold" 
      android:layout_alignParentTop="true" 
      android:layout_toEndOf="@+id/tvNombreVistaAmigo" 
      android:layout_toRightOf="@+id/tvNombreVistaAmigo" 
      android:layout_marginTop="41dp" 
      android:textSize="20dp" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Genero:" 
      android:id="@+id/tvGeneroVistaAmigo" 
      android:layout_centerVertical="true" 
      android:layout_alignStart="@+id/tvNombreVistaAmigo" 
      android:textColor="#333333" 
      android:textStyle="bold" /> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/etGeneroVistaAmigo" 
      android:hint="Hombre" 
      android:textColorHint="#333333" 
      android:textColor="#333333" 
      android:textStyle="bold" 
      android:layout_alignStart="@+id/etNombreVistaAmigo" 
      android:layout_below="@+id/etNombreVistaAmigo" 
      android:layout_marginTop="23dp" 
      android:textSize="20dp" /> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Confirmar" 
      android:id="@+id/btConfirmarAmigo" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:background="@drawable/rounded_corners_green" 
      android:layout_marginBottom="20dp" 
      android:textStyle="bold" 
      android:paddingLeft="20dp" 
      android:paddingRight="20dp" 
      android:textSize="20dp" /> 

    </RelativeLayout> 

</LinearLayout> 
</RelativeLayout> 
+0

Es ist in Ordnung, uns viele Informationen über Ihr Problem zu geben, aber bitte posten Sie nur einen relevanten Teil Ihres Codes, es ist zu viel zu lesen – Opiatefuchs

+0

Ich habe so viele Informationen eingegeben, weil vielleicht jemand zusätzliche Informationen benötigt Um eine bessere Antwort zu geben, ist der wichtigste Teil der Eintrag, wo ich das Problem erkläre. –

+0

:) ok, besser als die meisten Neulinge mit nur einem Satz :). – Opiatefuchs

Antwort

0

Von dem, was Ive in Ihrem Code zu sehen ist, dass Sie die id von einem intent in Ihrem PopUp window class zu bekommen versuchen.

Intent i = getIntent(); 
id = i.getIntExtra("Id", id); //forgott id = here 

und Sie sollten einen Standardwert id zum Beispiel id=-1 geben: Sie haben eine Sache falsch gemacht:

Intent i = getIntent(); 
i.getIntExtra("Id", id); 

es muss sein. Das Problem ist, indem Sie Ihre database aktualisieren, geben Sie eine non value integer und so ist es nicht möglich, Ihre Tabelle zu aktualisieren.

+0

Das funktioniert perfekt, vielen Dank.Aber ich habe Zweifel, warum, wenn ich ein Toas verwende, tut es nichts? Was sollte ich Kontext machen? Toast.makeText (VistaAmigo.this.getBaseContext(), "Nombre:" + etNombre.getText(). ZuString() + "Genero:" + etGenero.getText(). ToString() + "Cambios realizados", Toast. LÄNGE_LONG); –

+0

Sie haben vergessen, .show() am Ende Ihres Toasts anzurufen .... Toast.makeText (context, "HELLO", Toast.LENGTH_LONG) .show(); – Opiatefuchs

+0

Ich bin dumm, vielen Dank !! Und zum Schluss: Wenn ich die Gridview aktualisieren möchte, was sollte ich tun? Ich habe meine Funktion in der Gridview-Klasse zu aktualisieren –