Статический ArrayAdapter - PullRequest
       5

Статический ArrayAdapter

0 голосов
/ 15 января 2012

Я пытаюсь сделать статический 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...