Как сделать ListView с CheckBox и Image? - PullRequest
1 голос
/ 17 февраля 2012

Я использую этот код для моего простого ListView:

final ListView lv = (ListView)findViewById(R.id.apps_list);
        lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, myString.split("\n")));

        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

            }
        });

и макета:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        style="?android:attr/listSeparatorTextViewStyle"
        android:id="@+id/separator_apps"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/apps" />


    <ListView
        android:id="@+id/apps_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/separator_apps" >

    </ListView>

</RelativeLayout>

Но мне нужно добавить Image и CheckBox в каждую строку в ЭТО ListView, кто-нибудь может дать мне хороший пример?

Ответы [ 4 ]

1 голос
/ 06 декабря 2012

Нашел этот замечательный урок. Попробуйте это

1 голос
/ 17 февраля 2012

Я предпочитаю использовать TableLayout вместо ListView для отображения флажков, потому что флажки будут перезапускаться каждый раз, когда пользователь прокручивает просмотр списка, поэтому вам придется кэшировать все данные из флажков.Однако, если вы хотите использовать изображения или другие статические представления, можно использовать ListView.

Код будет выглядеть следующим образом для флажков и изображений, если у вас есть какой-либо метод для кэширования данных из флажков.

public class SDLibrary extends Activity {
ArrayList<LinearLayout> layout;
Context ctx;
ListView sdlistv;
private int[] bitmapArray;  
String[] mFiles;
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.sdlay);
    ctx=this;
    ListView sdlistv=(ListView) findViewById(R.id.list);
    layout=new ArrayList<LinearLayout>();

    for(int i=0;i<bitmapArray.length;i++){
        LinearLayout ll=new LinearLayout(this);
        layout.add(ll);
    }
    CustomAdapter ca=new CustomAdapter(this, R.id.linear, layout);
    sdlistv.setAdapter(ca);
    sdlistv.setFadingEdgeLength(40);
}
private class CustomAdapter extends ArrayAdapter<LinearLayout>{

    public CustomAdapter(Context context, int resources, List<LinearLayout> objects){
        super(context, resources, objects);
    }
    public View getView(int position, View convertView, ViewGroup parent){
        LinearLayout row;

        LayoutInflater mInflater = getLayoutInflater();
        if (convertView == null){
            row = getItem(position);
        }
        else{
            row = (LinearLayout) mInflater.inflate(R.layout.sdlay, null);
        }
        ImageView imageView =new ImageView(ctx);
        CheckBox cb=new CheckBox(ctx);
        imageView.setImageResource(bitmapArray[position]); //bitmapArray would be the array of images from the drawable
        imgData.add(imageView);
        row.addView(cb);
        row.addView(imageView);
        return row;
    }
}
}

sdlay.xml будет выглядеть так: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ListView 
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>   

<LinearLayout
android:id="@+id/linear"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
 </LinearLayout>
</LinearLayout>
1 голос
/ 21 февраля 2012

Спасибо @Lalit Poptani за уроки.

Я решил это с помощью следующего кода:

Создайте новый класс:

public class AppsArrayAdapter extends ArrayAdapter<String> {
    private final Context context;

    private final String DefaultApps = "def_apps";

    public AppsArrayAdapter(Context context, String[] values) {
        super(context, R.layout.apps, values);
        this.context = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        SharedPreferences myPrefsApps =context.getSharedPreferences("myPrefsApps", Context.MODE_PRIVATE);
        String prefNameDefaultApps = myPrefsApps.getString(DefaultApps, "");
        String prefNameDefaultAppsVer = myPrefsApps.getString(DefaultAppsVer, "");


        LayoutInflater inflater = (LayoutInflater)context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.apps, parent, false);
        TextView text_apps = (TextView)rowView.findViewById(R.id.text_apps);
        CheckBox check = (CheckBox)rowView.findViewById(R.id.check_apps);
        text_apps.setText(prefNameDefaultApps.split("\n")[position]);

        return rowView;
    }   
}

Затем создайте xml:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/text_apps"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:textAppearance="?android:attr/textAppearanceMedium" />


    <CheckBox
        android:id="@+id/check_apps"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />

</RelativeLayout>

А в своей деятельности к onCreate (например) добавьте этот код:

SharedPreferences myPrefsApps = AppsActivity.this.getSharedPreferences("myPrefsApps", MODE_PRIVATE);
String prefNameDefaultApps = myPrefsApps.getString(DefaultApps, "");

            AppsArrayAdapter adapter = new AppsArrayAdapter(this, prefNameDefaultApps.split("\n"));
            setListAdapter(adapter);
1 голос
/ 17 февраля 2012

вам нужно создать собственный настраиваемый адаптер для загрузки изображений и компонентов-флажков для каждого элемента, узнать некоторые основы создания настраиваемого адаптера в Android.

Остальное, вам нужно установить флажок, см. Мое предыдущее решение:

Как использовать флажок в списке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...