2012-07-26 97 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