这是我的实际活动:
在此活动中,我以编程方式动态设置所有 ListView。如您所见,我遇到的问题是第一个 ListView 占据了她需要的位置,第二个 ListView 尝试通过在内部添加滚动条来继续显示..
我只是想知道如何以编程方式让所有 ListView(s) 占据她需要的整个位置,并为所有活动添加一个 ScrollBar(例如,滚动菜单)?
这是我的活动和适配器:
public class SousBoissonsActivity extends Activity {
private String nom_categorie;
private ArrayList<String> arraySousCategoriesName;
private ArrayList<ArrayList<Drink>> arraySousCategories;
private ArrayList<MyAdapter> myAdapters;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sousboissons_list_item);
nom_categorie = getIntent().getStringExtra("nom_categorie");
setTitle(nom_categorie);
DrinksContainer.setSousCategoriesNameArray(nom_categorie);
DrinksContainer.setSousCategoriesArray(nom_categorie);
arraySousCategories = DrinksContainer.sousCategoriesArray;
myAdapters = new ArrayList<MyAdapter>();
new DoDirtyJobAsyncTask().execute();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
private class DoDirtyJobAsyncTask extends AsyncTask<Void, MyAdapter, Void> {
@Override
protected Void doInBackground(Void... params) {
for (ArrayList<Drink> arrayElement : arraySousCategories) {
MyAdapter myAdapter = new MyAdapter(getApplicationContext(),
arrayElement);
myAdapters.add(myAdapter);
publishProgress(myAdapter);
}
return null;
}
@Override
protected void onProgressUpdate(MyAdapter... myAdapters) {
int currViewId = 1;
LinearLayout ll = (LinearLayout) findViewById(R.id.sousboissons_linearlayout);
for (MyAdapter myAdapter : myAdapters) {
TextView sousCategorieTitle = new TextView(
getApplicationContext(), null);
sousCategorieTitle.setText(myAdapter.sousCategory);
sousCategorieTitle.setBackgroundColor(getResources().getColor(
R.color.green));
sousCategorieTitle.setTextSize(19);
sousCategorieTitle.setTextColor(getResources().getColor(
R.color.white));
sousCategorieTitle.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(0, 0, 0, 0);
sousCategorieTitle.setLayoutParams(layoutParams);
ListView listview = new ListView(getApplicationContext(), null);
listview.setId(currViewId);
listview.setAdapter(myAdapter);
LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
layoutParams2.setMargins(17, 0, 17, 0);
listview.setLayoutParams(layoutParams2);
ll.setPadding(15, 15, 15, 0);
ll.addView(sousCategorieTitle);
ll.addView(listview);
currViewId++;
}
}
}
class MyAdapter extends ArrayAdapter<Drink> {
LayoutInflater inflat;
private ArrayList<Drink> items;
private String sousCategory;
public MyAdapter(Context context, ArrayList<Drink> objects) {
super(
context,
R.layout.activity_sousboissons_list_item_elementsouscategorie,
objects);
this.items = objects;
this.inflat = LayoutInflater.from(context);
this.sousCategory = objects.get(0).getType();
}
private class ViewHolder {
public TextView title;
public TextView prix;
public TextView desc;
public TextView size;
public ImageView img;
public LinearLayout ll;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String currentKey = "";
String keyDialog = "";
ViewHolder holder = null;
Drink element = items.get(position);
// Instantiate Labels and Design
if (convertView == null) {
holder = new ViewHolder();
convertView = inflat
.inflate(
R.layout.activity_sousboissons_list_item_elementsouscategorie,
null);
holder.title = (TextView) convertView
.findViewById(R.id.sousboissons_element_title);
holder.desc = (TextView) convertView
.findViewById(R.id.sousboissons_element_desc);
holder.prix = (TextView) convertView
.findViewById(R.id.sousboissons_element_prix);
holder.size = (TextView) convertView
.findViewById(R.id.sousboissons_element_size);
if (element.getPrice().size() > 1) {
holder.ll = (LinearLayout) convertView
.findViewById(R.id.sousboissons_element_firt_layout);
holder.img = new ImageView(getApplicationContext(), null);
LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams1.weight = 12;
holder.title.setLayoutParams(layoutParams1);
LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams2.gravity = Gravity.RIGHT;
layoutParams2.weight = 1;
holder.img.setLayoutParams(layoutParams2);
holder.img.setImageResource(R.drawable.arrow);
holder.img.setPadding(0, 15, 0, 4);
// Alert Dialog
final LinearLayout alertDialogLayout = new LinearLayout(
SousBoissonsActivity.this);
ArrayList<Dictionary> dico = element.getPrice();
ListView liste = new ListView(SousBoissonsActivity.this);
MyAdapterDialog adapt = new MyAdapterDialog(
SousBoissonsActivity.this, element.getPrice());
liste.setAdapter(adapt);
alertDialogLayout.addView(liste);
final AlertDialog.Builder alert = new AlertDialog.Builder(
SousBoissonsActivity.this);
alert.setTitle(element.getName());
alert.setCancelable(true);
alert.setPositiveButton("Retour",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.dismiss();
}
});
alert.setView(alertDialogLayout);
holder.img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (alertDialogLayout.getParent() != null)
((ViewGroup) alertDialogLayout.getParent())
.removeView(alertDialogLayout);
alert.show();
}
});
holder.ll.addView(holder.img);
} else {
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// Setting Data on Labels
if (element != null) {
holder.title.setText(element.getName());
holder.desc.setText(element.getDescription());
if (element.getPrice().size() > 1) {
holder.prix.setVisibility(View.GONE);
holder.size.setVisibility(View.GONE);
} else {
Dictionary dico = element.getPrice().get(0);
Enumeration e = dico.keys();
while (e.hasMoreElements()) {
currentKey = (String) e.nextElement();
}
if (currentKey.equalsIgnoreCase("0")) {
holder.size.setVisibility(View.GONE);
holder.prix
.setText((String) dico.get(currentKey) + "€");
} else {
holder.prix
.setText((String) dico.get(currentKey) + "€");
holder.size.setText(currentKey + "cl");
}
}
}
return convertView;
}
}