2

私はActivityでBaseAdapterクラスを拡張するカスタムアダプタでGridviewを使用しています。GridViewアイテムの色がAndroid上でOnScrollを繰り返すか?

すべてがうまくいきました。値を設定すると、結果が得られます。しかし、gridviewの特定のセルをクリックして、そのセルのボタンの色を変更したいときに問題が発生します.OnClickListnerでは、このようなボタンの色を変更しました:

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      Toast.makeText(BookingActivity.this, "Hi click working" + position, Toast.LENGTH_SHORT).show(); 

      try { 

       Button button = (Button) view.findViewById(R.id.button3); 
       button.setBackgroundColor(Color.GREEN); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    }); 

ボタンの色は変更されていますが、グリッドビューをスクロールすると別のセルで色が繰り返されます。私はこの色がさらに繰り返されることを望んでいません。 多分セルは再利用されますが、このタイプの繰り返しを回避するにはどうすればよいでしょうか。私は、セルの特定のセルの色をクリックして変更しますが繰り返されていないときに私は、セルの複数選択をしたい

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
android:background="@android:color/white"> 
<Button 
    android:layout_width="150dp" 
    android:layout_height="100dp" 
    android:text="New Button" 
    android:id="@+id/button3" 
    android:clickable="false" 
    android:focusable="false" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

:ここ

は、これは私のgrid_item.xmlファイルである私のアダプタクラス

public class CustomGrid extends BaseAdapter { 

private Context mContext; 
private final ArrayList<String> web; 



public CustomGrid(Context c,ArrayList<String> web) { 
    mContext = c; 
    this.web = web; 

} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return web.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return web.get(position); 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View grid = convertView; 

    CoachHolder holder = null; 

    LayoutInflater inflater = (LayoutInflater) mContext 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (grid == null) { 

     grid = inflater.inflate(R.layout.grid_single,parent,false); 


     holder = new CoachHolder(grid); 

     grid.setTag(holder); 

    } else { 
     holder =(CoachHolder)grid.getTag(); 
    } 

    holder.button.setText(web.get(position)); 



    return grid; 
} 

static class CoachHolder { 


    Button button; 


    //TextView descriptions; 


    public CoachHolder(View v) { 


     button = (Button)v.findViewById(R.id.button3); 

    } 


} 
} 

です。 ポジションを使ってセルの特定のボタンを取得できないと思います。

私はこの問題から抜け出すために手伝ってください、それはすでにあまりにも多くの時間がかかりました。あなたの助けを事前に感謝

+0

  • を保存するために、あなたのアダプタにメソッドを追加します。あなたがクリックしたボタンの位置。次にスクロールするときに再びロードします。 http://stackoverflow.com/a/37041096/5381331をご覧ください。それはCheckBoxについてですが、アイデアは同じです –

  • 答えて

    0

    は、あなたのGetViewメソッドINSIDEセルの色を設定し、この

    1. を試してみてください。
    2. 現在選択されている位置あなたが保存してくださいあなたのonItemClickListenersaveSelectedItemPositionを呼び出してから、notifyDatasetChanged

    擬似コード

    public void saveSelectedItemPosition(int position){ 
        currentSelectedPosition = position; 
    } 
    
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    // do what you are currently doing 
    if(position == currentSelectedPosition){ 
        //change color 
    } else { 
        //use default color 
    } 
    
    
    
    
    return grid; 
    

    }

    +0

    実際に私は同じ問題を抱えています..私の問題は、そのセルやボタンをクリックすると、色を変更し、スクロールしながら繰り返さないでください。 – Anand

    +0

    私のセルは繰り返しだと思いますユーザーがセルをクリックすると、なぜセルの色が繰り返されているのですか。 – Anand

    関連する問題