正如我在評論中所提到的,您可以使用自定義baseadapter作爲您的gridview,並將圖像的數量作爲適配器類的構造函數中的一個參數。以下是您可以用來實現此目的的代碼段。
定製BaseAdapter
public class Adapter extends BaseAdapter {
private final Context context;
private final LayoutInflater inflater;
private final int numbers;
public Adapter(Context context, int numberOfImages) {
this.context = context;
this.numbers = numberOfImages;
this.inflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
//You need to return the numberOfImages here for
//the adapter to determine how many view you need to create.
return numbers;
}
private class viewHolder {
ImageView image;
TextView image_desc;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.grid_item, null);
holder = new viewHolder();
holder.image = (ImageView) convertView.findViewById(R.id.image);
holder.image_desc = (TextView) convertView
.findViewById(R.id.img_desc);
convertView.setTag(holder);
}
holder = (viewHolder) convertView.getTag();
if (position % 2 == 0) {
holder.image.setImageResource(R.drawable.ic_action_add_person);
holder.image_desc.setText("change");
}
return convertView;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}
你的主要活動:在此活動中,需要詢問用戶輸入他們希望看到的圖像數量。當用戶沒有輸入值時,我沒有添加任何驗證或錯誤消息,而是捕獲了可能的錯誤並使用它來指定默認值。根據您的要求,您可以在這裏應用其他類型的邏輯。
public class MainActivity extends Activity implements OnClickListener {
EditText text;
Button button;
int number;
private static final String NUMBER_OF_IMAGES = "numbers";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (EditText) findViewById(R.id.text);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
try {
number = Integer.parseInt(text.getText().toString());
// if user enters 0 or negative number then the default value is set
// to 2
if (number < 1) {
number = 2;
}
} catch (Exception e) {
e.printStackTrace();
// if user doesn't enter anything then code will catch
// classCastException and assign 2 as default value here
number = 2;
}
// start this intent by putting this number in the bundle
Intent i = new Intent(getApplicationContext(), SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putInt(NUMBER_OF_IMAGES, number);
i.putExtras(bundle);
startActivity(i);
}
}
次活動:這是你定義和初始化你的GridView和適配器活動。請確保您從以前的活動中檢索包並檢索用戶輸入的編號。
public class SecondActivity extends Activity {
GridView grid;
Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grids);
Bundle bundle = getIntent().getExtras();
int numbers = bundle.getInt(MainActivity.NUMBER_OF_IMAGES);
grid = (GridView) findViewById(R.id.gridview);
// depending upon your requirement you can also add logic here to set
// the number of columns based on the number entered by the user
setColumns(numbers);
adapter = new Adapter(getApplicationContext(), numbers);
grid.setAdapter(adapter);
}
@Override
protected void onResume() {
super.onResume();
adapter.notifyDataSetChanged();
}
/**
* Method to set the number of columns depending upon user input for desired
* grids. other attributes for the grid view can also be set her such as
* width, height, background etc.
*
* @param number
*/
public void setColumns(int number) {
if (number > 0 && number < 10) {
grid.setNumColumns(2);
} else if (number >= 10 && number < 20) {
grid.setNumColumns(4);
} else {
grid.setNumColumns(5);
}
}
}
注:這不是高度優化的性能的代碼,但只是提供了所需的功能可以如何實現的示例。
使用自定義適配器並在構造函數中傳遞來自用戶的多個圖像參數。用它來顯示n張想要顯示的圖像。 – Setu
其實有一種方法可以解決這個問題。初始化時可以取最大數量的列/行。然後你可以爲這些列/行應用android:visibility =「gone」屬性,你不需要。這樣你就可以實現它。 – VVB