SORU
13 Temmuz 2009, PAZARTESİ


Android özel öğeleri tıklatın yapamaz Liste Görünümü

Özel liste Görünümü bir nesne var. Liste öğeleri iki textviews üst üste yığılmış, artı ben aslında bir şey ne kadar gizli kalmasını istiyorum bu yatay bir ilerleme çubuğu var. Sağdaki ise sadece kullanıcı veritabanı güncellemeleri indirmek için gerektiğinde görüntülemek isteyen bir onay kutusu(s). Görünürlük görünürlük ayarı onay kutusunu devre dışı bıraktığınızda.GİTTİ, liste öğeleri mümkün duyuyorum. Onay kutusu görünür olduğunda, onay kutularını dışında listede bir şey tıklayın kuramıyorum. Bazı arama yaptım ama bir şey benim şu anki durumunuz için uygun bulmadım. this question ama ArrayLists veritabanları listesini içerir DAHİLİ olarak kullanıyorum beri geçersiz bir ArrayAdapter kullanıyorum buldum. Sadece LinearLayout görünüm almak ve eklemek gerekir Tom gibi bir onClickListener yaptım? Emin değilim.

İşte liste görünümü satır düzeni XML:

<?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="?android:attr/listPreferredItemHeight"
    android:padding="6dip">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="fill_parent">
        <TextView
            android:id="@ id/UpdateNameText"
            android:layout_width="wrap_content"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:textSize="18sp"
            android:gravity="center_vertical"
            />
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:id="@ id/UpdateStatusText"
            android:singleLine="true"
            android:ellipsize="marquee"
            />
        <ProgressBar android:id="@ id/UpdateProgress" 
                     android:layout_width="fill_parent" 
                     android:layout_height="wrap_content"
                     android:indeterminateOnly="false" 
                     android:progressDrawable="@android:drawable/progress_horizontal" 
                     android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal" 
                     android:minHeight="10dip" 
                     android:maxHeight="10dip"                    
                     />
    </LinearLayout>
    <CheckBox android:text="" 
              android:id="@ id/UpdateCheckBox" 
              android:layout_width="wrap_content" 
              android:layout_height="wrap_content" 
              />
</LinearLayout>

Ve burada ListActivity genişleten bir sınıf. Belli ki hala gelişme yok ya bırakmıştır, olabilecek şeyleri affeder yani:

public class UpdateActivity extends ListActivity {

    AccountManager lookupDb;
    boolean allSelected;
    UpdateListAdapter list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        lookupDb = new AccountManager(this);
        lookupDb.loadUpdates();

        setContentView(R.layout.update);
        allSelected = false;

        list = new UpdateListAdapter(this, R.layout.update_row, lookupDb.getUpdateItems());
        setListAdapter(list);

        Button btnEnterRegCode = (Button)findViewById(R.id.btnUpdateRegister);
        btnEnterRegCode.setVisibility(View.GONE);

        Button btnSelectAll = (Button)findViewById(R.id.btnSelectAll);
        btnSelectAll.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                allSelected = !allSelected;

                for(int i=0; i < lookupDb.getUpdateItems().size(); i  ) {
                    lookupDb.getUpdateItem(i).setSelected(!lookupDb.getUpdateItem(i).isSelected());
                }

                list.notifyDataSetChanged();
                // loop through each UpdateItem and set the selected attribute to the inverse 

            } // end onClick
        }); // end setOnClickListener

        Button btnUpdate = (Button)findViewById(R.id.btnUpdate);
        btnUpdate.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
            } // end onClick
        }); // end setOnClickListener

        lookupDb.close();
    } // end onCreate


    @Override
    protected void onDestroy() {
        super.onDestroy();

        for (UpdateItem item : lookupDb.getUpdateItems()) {
            item.getDatabase().close();        
        }
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        UpdateItem item = lookupDb.getUpdateItem(position);

        if (item != null) {
            item.setSelected(!item.isSelected());
            list.notifyDataSetChanged();
        }
    }

    private class UpdateListAdapter extends ArrayAdapter<UpdateItem> {
        private List<UpdateItem> items;

        public UpdateListAdapter(Context context, int textViewResourceId, List<UpdateItem> items) {
            super(context, textViewResourceId, items);
            this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = null;

            if (convertView == null) {
                LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                row = li.inflate(R.layout.update_row, null);
            } else {
                row = convertView;
            }

            UpdateItem item = items.get(position);

            if (item != null) {
                TextView upper = (TextView)row.findViewById(R.id.UpdateNameText);
                TextView lower = (TextView)row.findViewById(R.id.UpdateStatusText);
                CheckBox cb = (CheckBox)row.findViewById(R.id.UpdateCheckBox);

                upper.setText(item.getName());
                lower.setText(item.getStatusText());

                if (item.getStatusCode() == UpdateItem.UP_TO_DATE) {
                    cb.setVisibility(View.GONE);
                } else {
                    cb.setVisibility(View.VISIBLE);
                    cb.setChecked(item.isSelected());
                }

                ProgressBar pb = (ProgressBar)row.findViewById(R.id.UpdateProgress);
                pb.setVisibility(View.GONE);
            }
            return row;
        }

    } // end inner class UpdateListAdapter
}

edit: hala bu sorunu yaşıyorum. Ve textviews için özelliği işleyicileri hile ekliyorum ama benim onListİtemClick son derece aptalca görünüyor() fonksiyonu benim onay kutusunu tıklayarak değilim zaman çağrıldığını değil.

CEVAP
13 EKİM 2009, Salı


Sorun Android odaklanabilir onlara öğeleri liste öğeleri seçmek için izin vermez. Liste öğesi checkbox bir öznitelik gibi çok var değişiklik:

android:focusable="false"

Şimdi benim liste öğeleri içeren kutuları (bu işlem düğmeleri de) "seçilebilir" geleneksel anlamda (ışık, herhangi bir yere tıklayın liste öğesi ve "onListİtemClick" işleyicisi olacak yangın, vb.).

EDİT: bir güncelleme Olarak, bir yorumcu "Sadece bir not, düğmesinin görünürlüğü Program aracılığıyla tekrar odaklama devre dışı bırakmak zorundaydım." değiştirdikten sonra belirtilen

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • Neil Cicierega

    Neil Ciciere

    22 Mart 2006
  • Unbox Therapy

    Unbox Therap

    21 Aralık 2010