2016-10-11 8 views
0

Gridviewにいくつかのアイテムを表示し、ボタンクリックリスナーを表示しようとしました。項目をクリックすると、ダイアログボックスが表示されます。はいを​​クリックすると、Imageviewが変更されます。ここでAndroid SetImageResourceがボタンクリック時にGridviewで機能しない

public class table extends AppCompatActivity implements AdapterView.OnItemClickListener{ 

GridView gridView; 
my_adapter my_adapter; 
String table_names[]={"1a","1b","1c","1d","2a","2b","2c","2d","3a","3b","3c","3d"}; 

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

    gridView=(GridView)findViewById(R.id.gridview); 
    my_adapter=new my_adapter(this,table_names); 
    gridView.setAdapter(my_adapter); 
    gridView.setOnItemClickListener(this); 
} 

@Override 
public void onItemClick(final AdapterView<?> adapterView, final View view, final int i, long l) { 

    new AlertDialog.Builder(this) 
      .setTitle("Table number: "+adapterView.getItemAtPosition(i).toString()) 
      .setMessage("Open Table?") 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        my_adapter.change_img(); // change to new image 

       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        my_adapter.change_img2(); // change back to original image 
       } 
      }) 
      .show(); 
} 
} 

class my_adapter extends BaseAdapter{ 

ImageView imageView; 
LayoutInflater inflater=null; 
Context ctx; 
String table_names[]; 
ArrayList store_table_no; 

my_adapter(Context ctx, String table_names[]){ 
    this.ctx=ctx; 
    this.table_names=table_names; 
    store_table_no=new ArrayList<Integer>(); 
    for (int i=0;i<table_names.length;i++){ 
     store_table_no.add(table_names[i]); 
    } 
} 

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

@Override 
public Object getItem(int i) { 
    return store_table_no.get(i); 
} 

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

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

    View row=view; 

    if(row==null){ 
     inflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row=inflater.inflate(R.layout.single,null); 
    } 

    TextView tv_table_no=(TextView)row.findViewById(R.id.table_no); 
    imageView=(ImageView)row.findViewById(R.id.imageView); 
    tv_table_no.setText(""+store_table_no.get(i)); 

    return row; 
} 

public void change_img(){ 
    imageView.setImageResource(R.drawable.table_full); 
} 

public void change_img2(){ 
    imageView.setImageResource(R.drawable.table3d2); 
} 
} 

single.xml

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

<TextView 
    android:text="101" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/table_no" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:textSize="22sp" /> 

<ImageView 
    app:srcCompat="@drawable/table" 
    android:id="@+id/imageView" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:layout_width="130dp" 
    android:layout_height="100dp" /> 
</RelativeLayout> 

コーディング

Javaはスクリーンショットで、

enter image description here

ご覧下さい

単にイメージビューを変更しません。私のコーディングで何かが間違っているように見えます。誰が何が起こっているのか知っていますか?

答えて

1

GridViewのOnItemClickListenerを実装して、ダイアログを表示し、各アイテムのユーザーからの決定を取得します。ダイアログを表示しているときは、現在クリックされているグリッドの項目を更新する必要があります。しかし、あなたのケースでは、アダプタでchange_img()があります。アダプターには位置指定はありません。

動作させるには、ロジックをアクティビティからアダプタに移動します。その位置でクリックイベントを処理します。

私はそれはあなたを助けることを願っていますあなたの活動に

、あなたのXMLファイルに

public class table extends AppCompatActivity{ 

GridView gridView; 
my_adapter my_adapter; 
String table_names[] = {"1a", "1b", "1c", "1d", "2a", "2b", "2c", "2d", "3a", "3b", "3c", "3d"}; 

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

    gridView = (GridView) findViewById(R.id.grid); 
    my_adapter = new my_adapter(this, table_names); 
    gridView.setAdapter(my_adapter); 
} 


class my_adapter extends BaseAdapter { 

    LayoutInflater inflater = null; 
    Context ctx; 
    String table_names[]; 
    ArrayList<String> store_table_no; 

    my_adapter(Context ctx, String table_names[]) { 
     this.ctx = ctx; 
     this.table_names = table_names; 
     store_table_no = new ArrayList<>(); 
     store_table_no.addAll(Arrays.asList(table_names)); 
    } 

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

    @Override 
    public Object getItem(int i) { 
     return store_table_no.get(i); 
    } 

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

    @Override 
    public View getView(final int i, View view, ViewGroup viewGroup) { 

     View row = view; 

     if (row == null) { 
      inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.single, null); 
     } 

     RelativeLayout layout = (RelativeLayout) row.findViewById(R.id.relative_layout); 
     TextView tv_table_no = (TextView) row.findViewById(R.id.table_no); 
     final ImageView imageView = (ImageView) row.findViewById(R.id.imageView); 
     tv_table_no.setText(store_table_no.get(i)); 


     layout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       new AlertDialog.Builder(GridActivity.this) 
         .setTitle("Table number: " + store_table_no.get(i)) 
         .setMessage("Open Table?") 
         .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           imageView.setImageResource(R.mipmap.ic_launcher); 
          } 
         }) 
         .setNegativeButton("No", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           imageView.setImageResource(R.drawable.icon); 

          } 
         }) 
         .show(); 
      } 
     }); 
     return row; 
    } 

} 
} 

次のように親相対的なレイアウトにIDを追加し、

single.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" android:layout_width="match_parent" 
android:id="@+id/relative_layout" 
android:clickable="true" 
android:layout_height="match_parent"> 

<TextView 
    android:text="101" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/table_no" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:textSize="22sp" /> 

<ImageView 
    app:srcCompat="@drawable/table" 
    android:id="@+id/imageView" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:layout_width="130dp" 
    android:layout_height="100dp" /> 
</RelativeLayout> 

+0

thx。かなりの数のエラーがあります。 plzあなたのコーディングをチェックしてください。あなたはコーディングをテストしていますか? – gosulove

+0

私は確認して更新する時間を与えてください。 –

+0

ok。更新を待つ。 – gosulove

関連する問題