2016-03-30 43 views
-1

Android Studio kullanarak bir tür oyun oluşturmaya çalışıyorum. Şimdiye kadar bir veritabanında saklanan oyuncuları gösteren bir gridview yaptım. GridView.setOnItemClickListener ile bazı sorunlar yaşadım, bunu gridView'ın Adparter.class içine koydum, bunu gridView'ın aktivitesine nasıl yapabildiğimi bilirseniz bunu bana söyleyin.PopUp Penceresi veritabanını güncelleştirmiyor - Android

Sorunum şu ki, bir oyuncuya tıkladığınızda oyuncunun adını veya türünü değiştirebileceğiniz bir açılır pencere görüntülenir. Onayla düğmesine tıkladığınızda, veritabanı otomatik olarak güncellenecektir, ancak çalışmaz. Bu parçayı çalıştırıp çalıştırmadığınızı öğrenmek için Toast'ı kullanarak adım adım yapmaya çalışıyorum, sorun bağlam olabilir, ama belki de deliyim.

Size bazı resimler ve bununla ilgili kodu bıraktım.

GridView en pic ->http://i.stack.imgur.com/GO4ms.png

PopUp windos'a en pic ->http://i.stack.imgur.com/aAvcm.png

GridView'da en adaptör sınıfı

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'da sınıf

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 pencere sınıfı

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 düzeni

<?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'da en öğe düzeni

<?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> 
01 Boyunca hep şeffaf Kodunuzdaki görülen kadarıyla

PopUp pencere düzeni

<?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

Sorununuz hakkında bize çok fazla bilgi vermek için sorun değil, ancak lütfen kodunuzun yalnızca ilgili bir bölümünü gönderin, çok fazla – Opiatefuchs

+0

okumak için çok fazla bilgi verdim çünkü birilerinin sırayla daha fazla bilgiye ihtiyacı olabilir daha iyi bir cevap vermek için, en önemli kısım problemi açıkladığım girdidir. –

+0

:) Tamam, sadece bir cümle ekleyerek çoğu newbies yapmaktan daha iyidir :). – Opiatefuchs

cevap

0

size PopUp window class bir intent den id elde etmeye çalışmak olmasıdır.

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

öyle olmalı: Sen bir şey yanlış yaptık

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

ve örneğin id=-1 için id için varsayılan bir değer vermelidir. Sorun şu ki, database numaralı telefonu güncelleştirerek, non value integer numaralı telefonu verdiniz ve bu nedenle tablonuzu güncellemek mümkün değil.

+0

Mükemmel çalışıyor, çok teşekkürler.Ama şüphem var, neden bir toas kullandığımda hiçbir şey yapmıyor? bağlamda ne koymalıyım? Toast.makeText (VistaAmigo.this.getBaseContext(), "Nombre:" + etNombre.getText(). ToString() + "Genero:" + etGenero.getText(). ToString() + "Cambios realizados", Toast. LENGTH_LONG); –

+0

tost.makeText (context, "HELLO", Toast.LENGTH_LONG) .show(); – Opiatefuchs

+0

Ben aptalım, çok teşekkürler! Ve nihayet gridview’i yenilemek istersem ne yapmalıyım? Ben gridview'in sınıf –