2017-12-31 42 views
2

私は画像ギャラリーアプリを持っています。今は一度に1つの画像しか選択できません。しかし、私は一度に複数の画像を選択して削除できるようにしたい。私はこの問題に基づいていくつかのコードを試しましたHow to do multiselect functionality on grid view items on tap?しかし、なぜそれが動作していないのか分かりません。助言がありますか?複数のグリッドビュー項目を選択できません

PhotosActivity.java

public class PhotosActivity extends AppCompatActivity { 
    int int_position; 
    private GridView gridView; 
    GridViewAdapter adapter; 
    ArrayList<Model_images> al_menu = new ArrayList<>(); 
    private ArrayList<Integer> mSelected = new ArrayList<Integer>(); 
    boolean boolean_folder; 

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

     final ImageButton button1 = (ImageButton) findViewById(R.id.button1); 
     final ImageButton button2 = (ImageButton) findViewById(R.id.button2); 
     final ImageButton button3 = (ImageButton) findViewById(R.id.button3); 
     final ImageButton button4 = (ImageButton) findViewById(R.id.button4); 
     final ImageButton button5 = (ImageButton) findViewById(R.id.button5); 
     button1.setVisibility(View.GONE); 
     button2.setVisibility(View.GONE); 
     button3.setVisibility(View.GONE); 
     button4.setVisibility(View.GONE); 
     button5.setVisibility(View.GONE); 

     gridView = (GridView) findViewById(android.R.id.list); 
     int_position = getIntent().getIntExtra("value", 0); 
     adapter = new GridViewAdapter(this, al_images, int_position); 
     gridView.setAdapter(adapter); 

     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       String abc = "file://" + al_images.get(int_position).getAl_imagepath().get(position); 

       Intent i = new Intent(getApplicationContext(), FullImageActivity.class); 
       i.putExtra("id", position); 
       i.putExtra("folderPosition", int_position); 
       i.putExtra("abc", abc); 
       startActivity(i); 
      } 
     }); 

     gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { 
       Integer position1 = new Integer(position); 
       if(mSelected.contains(position1)) { 
        mSelected.remove(position1); // remove item from list 
        // update view (v) state here 
        // eg: remove highlight 
       } 
       else { 
        mSelected.add(position1); // add item to list 
        // update view (v) state here 
        // eg: add highlight 
       } 
} 
+0

このリンクに従うことができます。これが助けてくれることを願っています[例](https://stackoverflow.com/questions/19633672/how-to-do-multiselect-functionality-on-grid-view-items-on-tap) –

+0

その位置を別の配列リストに追加し、ユーザーが完了ボタンをクリックしたら、位置配列を反復して選択した画像を削除します。 –

+0

私はそのリンクだけに従っている、私はそこからコードを取ったが、何とか私のために働いていない@bluedream –

答えて

0
  1. ような何かはモデルクラスで選択したフィールドを取ります。項目が の場合、selected = trueとnotifyAdapterが選択されます。

  2. あなたのonBindViewHolder()の項目がisSelectedの場合、ビューの背景(elseブロックの書き込みを忘れないでください)。

  3. また、項目を削除すると、アダプタまたはアクティビティ内のオブジェクトの個別のリストが維持されます。

コード内:位置を維持するのではなく、オブジェクトのリストを維持することをお勧めします。 上記の2つの手順を使用して、項目を選択したときの表示を変更します。 助けてくれることを願っています。

+0

ありがとう、その作業:) –

+0

偉大な@redViperアップ投票のおかげで:) –

0

は、現在 選択した項目の位置を含みリストを維持

  • 以下のように

    に従うことができる方法かもしれません。
  • アイテムが選択されているかどうかを表示するには、ビューを更新する必要があります。その場合は、I がコードを追加します(+コメント)。
  • 最後に、リストには選択されたすべての項目が含まれます。

そのExample

関連する問題