2012-07-26 44 views
0

我的布局中有一个gridview。我已经为这个gridview添加了三个imageviews。GridView中的焦点问题

我有以下要求。默认情况下,当我启动或恢复活动时,我需要默认选择一个imageview。我怎么能做到这一点?放置gridView.setSelection(1);onResume()没有影响,即; imageview在启动或恢复时没有被选中,我想知道为什么!有人可以让我知道为什么这不会突出显示?

以下是我的主要活动和适配器类。

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

你可以试试这个:

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

或也这可以帮助:

公共无效的onResume(){

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

}

+0

OK,这个工程。但我注意到的问题是,当我按下imageview后立即按下返回按钮,即;甚至在下一次活动启动之前,稍后当我从下一次活动回来时,我没有重点。所以,我的问题是,在上面的代码中,是否有任何方法可以使触摸屏在屏幕上除了图像浏览以外的其他区域被禁用? – user1400538 2012-07-26 11:37:01

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 
+0

感谢您的帮助,但没有运气:( – user1400538 2012-07-26 10:50:03