2016-11-11 28 views
1

GridView成功しましたが、GridView内の画像を変数に依存して変更したいと考えています。例:Android Studio GridViewで画像を動的に変更する

int a = 2 
if (a == 2){ 
    Integer[] images = { 
     R.drawable.image1 
     R.drawable.image3 
    } 
} else { 
    Integer[] images = (
     R.drawable.image2 
     R.drawable.image4 
    } 
} 

しかし、私はこれを行う方法を見つけることができません。私は現時点でで働いていたコードは次のようになります。また、

public class ImageAdapter extends BaseAdapter { 
private int images[]; 
Context context; 

public ImageAdapter(Context context, int images[]){ 

    this.context = context; 
    this.images = images; 
} 

private class Holder{ 
    ImageView imageView; 
} 

@Override 
public int getCount(){ 
    return images.length; 
} 

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

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

@Override 
public View getView(final int position, View view, ViewGroup parent){ 
    //All of this Holder stuff is so that the View doesn't jump around wildly 

    final Holder holder; 
    LayoutInflater inflater; 

    if (view == null){ 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.singleimage,null); 
     holder = new Holder(); 
     holder.imageView = (ImageView) view.findViewById(R.id.singleImage); 
     view.setTag(holder); 
    } 
    else { 
     holder = (Holder) view.getTag();} 

    holder.imageView.setImageResource(images[position]); 

    return view; 

} 
} 

ます:

アクティビティ:

public class MainActivity extends AppCompatActivity { 

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

    GridView gridView = (GridView) findViewById(R.id.gridView); 
    int images[] = {R.drawable.ic_action_name}; 
    ImageAdapter imageAdapter = new ImageAdapter(getApplicationContext(),images); 
    gridView.setAdapter(imageAdapter); 

    } 
} 

あなたのアダプタクラス

GridView cardList = (GridView) findViewById(R.id.cardList); 
    cardList.setAdapter(new ImageAdapter(this)); 

    cardList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
           int position, long id) { 
      Toast.makeText(Create.this, "" + position, 
        Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 

    public ImageAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return images.length; 
    } 

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

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(215, 215)); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(images[position]); 
     return imageView; 
    } 

    private Integer[] images = { 
      R.drawable.iamge1, R.drawable.image2 
    }; 
} 
+0

あなたが書いたコードを使用するときに何が起こっている。この「singleimage.xml」

<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/singleImage" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 

活動xmlファイルに名前を付けますか? – emhomm4

+0

返信いただきありがとうございます。画像アレイ内のすべての画像を含む2列のグリッドが表示されているので、現時点で正常に動作していますが、その配列内の値を動的に変更できるようにしたいと考えています。このようにしてグリッドビューの画像をフィルタリングして、一部の画像のみを表示することができます。 – Stafford

+0

どのように変更をトリガーしますか?ボタンをクリックするだけですか? – emhomm4

答えて

0

はこのような何かを試してみてくださいgridView内の単一のイメージのための単純なXMLファイルが必要です。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.ri.emily.testapp.MainActivity">  

    <GridView 
     android:layout_width="match_parent" 
     android:id="@+id/gridView" 
     android:layout_height="match_parent" /> 
</RelativeLayout> 
+0

ありがとうございますが、コードの最初の部分は、 "int a = 2 ...."、アクティビティクラスのonCreate部分にありますか?また、ImageViewで最後の部分に別のXMLファイルを作成しますか? (申し訳ありません、私は新しくなりました)@EmilyHommerding – Stafford

+0

はい、それはonCreateに入ります。最終的には、それをonClickListenerに追加して、アダプターに変更を通知する必要があります。もちろん、imageView用の別個のXMLファイルです。これを、gridView内のすべての個別の画像に再利用される一般的なimageViewと考えてください。 – emhomm4

+0

"シンボル 'ホルダー'を解決できません。 Hodlerが使用されているどこでも起こっています@エミリーHommerding – Stafford

関連する問題