Я пытаюсь сделать статический ArrayAdapter, но с моим стилем, потому что динамика этого создала некоторые проблемы, и лаги
хм, у меня был какой-то другой запрос, мне нужно объединить мои 2 класса (один с ArrayAdapter и другим основным списком) и статический объект this ArrayAdapter для основного класса
есть мой основной класс:
public class List extends Activity implements OnItemClickListener {
ListView myList;
Context myContext;
String[] intent = { "mods", "a2sd", "cpu", "modules", "statusbar",
"interface", "ota", "programset" };
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
String[] values = new String[] { getString(R.string.nmradvset),
getString(R.string.a2sd), getString(R.string.cpusett),
getString(R.string.modules), getString(R.string.StatusBar),
getString(R.string.interfaces), getString(R.string.ota),
getString(R.string.programset) };
String[] values2 = new String[] { getString(R.string.device_sum),
getString(R.string.a2sd_sum), getString(R.string.cpu_sum),
getString(R.string.modules_sum), getString(R.string.statusbar_sum),
getString(R.string.interface_sum), getString(R.string.ota_sum),
getString(R.string.program_sum) };
int[] key = new int[] { R.string.nmradvset, R.string.a2sd,
R.string.cpusett, R.string.modules, R.string.StatusBar,
R.string.interfaces, R.string.ota, R.string.programset };
setContentView(R.layout.main);
myList = (ListView) findViewById(R.id.list_main);
myList.setAdapter(new MyArrayAdapter(this, values, values2, key));
(new MyArrayAdapter(this, values, values2, key)).notifyDataSetChanged();
myList.invalidate();
myList.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View v, int item, long id) {
// TODO Auto-generated method stub
Intent myIntent = new Intent("com.android.nmr." + intent[item]);
startActivity(myIntent);
}
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater mymenu = getMenuInflater();
mymenu.inflate(R.menu.nmr_menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.exit:
finish();
return true;
case R.id.reboot:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.dialog_title)
.setMessage(R.string.reb_dialog_message)
.setCancelable(false)
.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// do something if OK
if (ShellInterface.isSuAvailable()) {
ShellInterface.runCommand("reboot");
Toast.makeText(getBaseContext(),
R.string.rebooting,
Toast.LENGTH_LONG).show();
}
}
})
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// do something if Cancel
}
});
builder.create().show();
return true;
}
return false;
}
}
и класс ArrayAdapter:
public class MyArrayAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] names, sunames;
int[] values;
public MyArrayAdapter(Activity context, String[] names, String[] sunames,
int[] values) {
super(context, R.layout.row, names);
this.context = context;
this.names = names;
this.sunames = sunames;
this.values = values;
}
// Класс для сохранения во внешний класс и для ограничения доступа
// из потомков класса
static class ViewHolder {
public ImageView imageView, imageView2;
public TextView textView, textView2, textView3;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ViewHolder буферизирует оценку различных полей шаблона элемента
ViewHolder holder;
// Очищает сущетсвующий шаблон, если параметр задан
// Работает только если базовый шаблон для всех классов один и тот же
View rowView = convertView;
int s1 = values[position];
if (rowView == null) {
LayoutInflater inflater = context.getLayoutInflater();
if (s1 == R.string.nmradvset || s1 == R.string.StatusBar
|| s1 == R.string.ota)
rowView = inflater.inflate(R.layout.row2, null, true);
else
rowView = inflater.inflate(R.layout.row, null, true);
holder = new ViewHolder();
holder.textView = (TextView) rowView.findViewById(R.id.first);
holder.textView2 = (TextView) rowView.findViewById(R.id.second);
holder.textView3 = (TextView) rowView.findViewById(R.id.title);
holder.imageView = (ImageView) rowView.findViewById(R.id.icon);
holder.imageView2 = (ImageView) rowView
.findViewById(R.id.imageView4);
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
holder.textView.setText(names[position]);
holder.textView2.setText(sunames[position]);
// Изменение иконки для Windows и iPhone
int s = values[position];
if (s == R.string.nmradvset) {
holder.imageView.setImageResource(R.drawable.ic_nmrmods);
holder.textView3.setText(R.string.main);
}
if (s == R.string.cpusett)
holder.imageView.setImageResource(R.drawable.ic_cpu);
if (s == R.string.a2sd)
holder.imageView.setImageResource(R.drawable.ic_a2sd);
if (s == R.string.modules)
holder.imageView.setImageResource(R.drawable.ic_modules);
if (s == R.string.cpusett)
holder.imageView.setImageResource(R.drawable.ic_cpu);
if (s == R.string.StatusBar) {
holder.imageView.setImageResource(R.drawable.ic_statusbar);
holder.textView3.setText(R.string.iface);
}
if (s == R.string.interfaces)
holder.imageView.setImageResource(R.drawable.ic_interface);
if (s == R.string.ota) {
holder.imageView.setImageResource(R.drawable.ic_ota);
holder.textView3.setText(R.string.other);
}
if (s == R.string.programset)
holder.imageView.setImageResource(R.drawable.ic_programset);
return rowView;
}
}
МОЙ основной макет:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingBottom="0.0sp"
android:scaleType="fitXY"
android:src="@drawable/header" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="60.0sp"
android:layout_marginTop="-27.0sp"
android:text="@string/app_name"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="35sp"
android:layout_height="35sp"
android:layout_marginLeft="10.0sp"
android:layout_marginTop="-30.0sp"
android:paddingBottom="0.0sp"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher" />
<ListView
android:id="@+id/list_main"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_weight="1.0"
android:clickable="true"
android:drawSelectorOnTop="false"
android:smoothScrollbar="true" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingBottom="0.0sp"
android:scaleType="fitXY"
android:src="@drawable/addonbuttonbg" />
</LinearLayout>
</LinearLayout>
мой макет row1:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="0.0sp"
android:paddingBottom="0.0sp"
android:scaleType="fitXY"/>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="1.0" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip" >
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="6dip" />
<LinearLayout
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/first"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_marginTop="5.0sp"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="My Application"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/second"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:ellipsize="marquee"
android:singleLine="true"
android:text="Simple application that shows how to use RelativeLayout" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
макет строки 2:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView4"
android:layout_width="fill_parent"
android:layout_height="20sp"
android:layout_gravity="center"
android:layout_marginTop="0.0sp"
android:paddingBottom="0.0sp"
android:scaleType="fitXY"
android:src="@drawable/addonbuttonbg"/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15.0sp"
android:layout_marginTop="-20.0sp"
android:text="s" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="1.0" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip" >
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="6dip" />
<LinearLayout
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/first"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_marginTop="5.0sp"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="My Application"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/second"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:ellipsize="marquee"
android:singleLine="true"
android:text="Simple application that shows how to use RelativeLayout" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>