0

レイアウトにグリッドビューがあります。このグリッドビューに 3 つのイメージビューを追加しました。

次の要件があります。デフォルトでは、アクティビティを起動または再開するときに、デフォルトでイメージビューを選択する必要があります。どうすればそれを達成できますか?gridView.setSelection (1); を配置します。onResume()では効果がありません。起動時または再開時にイメージビューが選択されないのはなぜですか? これが強調表示されない理由を誰かに教えてもらえますか?

以下は、私の主なアクティビティとアダプター クラスです。

public class MyActivity extends Activity
{
GridView gridView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    gridView = (GridView) findViewById(R.id.grid_view);
    // Instance of ImageAdapter Class
    gridView.setAdapter(new ImageAdapter(this));
    // set up the onClick listener
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v,
                                int position, long id) {
            Log.d("Pos", "setOnItemClickListener() - pos:" + position);
            handleItemClick(position);
        }
    });

}
public void onResume() {
    super.onResume();
    gridView.setSelection(1);
}
private void handleItemClick(int position) {

        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);

        switch(position) {
            case 0:  // Phone
                intent.setClassName("com.android.contacts",
                        "com.android.contacts.DialtactsActivity");
                break;
            case 1:  // People
                intent.setClassName("com.android.contacts",
                        "com.android.contacts.activities.PeopleActivity");
                intent.setAction("com.android.contacts.action.LIST_CONTACTS");
                break;
            case 2:  // Places
                intent.setClassName("com.android.contacts",
                        "com.android.contacts.DialtactsActivity");
                break;
            default:
                break;
        }
        startActivity(intent);
}
}

アダプタ クラス

public class ImageAdapter extends BaseAdapter {
private Context mContext;

// Keep all Images in an array   
public Integer[] mThumbIds = {
    R.drawable.call, 
    R.drawable.contacts,
    R.drawable.music,
};

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

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

@Override
public Object getItem(int position) {
    return mThumbIds[position];
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView; 

    if (convertView == null) {           
        imageView = new ImageView(mContext);  
        imageView.setLayoutParams(new GridView.LayoutParams(350, 350));  
    } else {  
        imageView = (ImageView) convertView;   
    }

    imageView.setImageResource(mThumbIds[position]);
    imageView.setId(position);

    return imageView;
}

}
4

2 に答える 2

4

これを試すことができます:

public void onResume() {
    super.onResume();
    Thread.sleep(1);
    gridview.requestFocusFromTouch();
    gridview.setSelection(1); 
}

またはこれも役立ちます:

public void onResume() {

super.onResume();
mGridView.setSelection(1);
mGridView.requestFocusFromTouch();
mGridView.setSelection(1);

}

于 2012-07-26T11:02:54.140 に答える
1

推測だけでうまくいくかもしれません

    setContentView(R.layout.main);
    gridView = (GridView) findViewById(R.id.grid_view);
    // Instance of ImageAdapter Class
    gridView.setAdapter(new ImageAdapter(this));
    gridView.setSelection(1); <--- try to add this here
于 2012-07-26T10:43:22.447 に答える