Проблема с флажком - PullRequest
       1

Проблема с флажком

0 голосов
/ 03 августа 2011

В настоящее время у меня есть флажок в моем списке просмотра, из BaseAdapter я установил идентификатор флажка с моим собственным идентификатором. Когда я получаю доступ к этому идентификатору из Activity. Я получаю исключение нулевого указателя? Хотя я отлаживаю, у меня все еще есть исключение нулевого указателя?

Разве невозможно установить id флажка вручную. Флажок имеет метод setId (int id).

Есть мысли об исключении нулевого указателя в checkBox.getId ()? это мой getView (), где я установил идентификатор checkBox.

viewHolder.checkBox.setId(myList.get(position).getId());

На активности я сделал так, потому что мне нужно удалить все отмеченные флажки.

private void deleteCheckItems() {
    SparseBooleanArray booleanArray = listView.getCheckedItemPositions();
    for (int i = 0; i < listView.getCount(); i++) {
        if (booleanArray.get(i))
            Toast.makeText(getBaseContext(), " the selected index is " + i, Toast.LENGTH_SHORT).show();
    }
}

Я получаю исключение нулевого указателя из этого метода

Отредактировано: мой исходный код выглядит так:

public View getView(int position, View view, ViewGroup parent){
    ViewHolder viewHolder;
    if(view==null){
        viewHolder = new ViewHolder();
        view = layoutInfalter.inflate(R.layout.item_row,null);
        viewHolder.checkBox = (CheckBox)view.findViewById(R.id.CheckBoxId);

        if(VIEW_MODE==-1){
            viewHolder.checkBox.setVisibility(View.INVISIBLE);
        }else{
             myAdapter.setViewMode(1);
             viewHolder.checkBox.setVisibility(View.VISIBLE);
                         viewHolder.checkBox.setId(myList.get(position).getId());      

        }
        viewHolder.text1= (TextView)view.findViewById(R.id.text1);
        viewHolder.text2 =TextView)view.findViewById(R.id.text2);
        view.setTag(viewHolder);

    }else{
        viewHolder = (ViewHolder)view.getTag();
    }
    viewHolder.text1.setText(myList.get(position).getText1());
    viewHolder.text2.setText(myList.get(position).getText2());
    //viewHolder.checkBox.setId(myList.get(position).getId());
    return view;
}

1 Ответ

0 голосов
/ 03 августа 2011

это может вам помочь !!

Это работает для меня:

ROW.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="fill_parent"
android:layout_gravity="center"
android:background="#ffffff">

<RelativeLayout
android:id="@+id/actionsLayout"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:paddingRight="10dip"
android:gravity="center"
android:paddingBottom="10dip">

 //change it to CheckBox
  <ImageView
android:id="@+id/markFav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/heart"/>

</RelativeLayout>

<RelativeLayout
android:id="@+id/textLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_toLeftOf="@+id/actionsLayout"
android:layout_margin="10dip">
<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:lines="4"
android:gravity="center_vertical"
android:ellipsize="end"
android:textColor="#000000"
android:text="Row Text Here"/>
 </RelativeLayout>

  </RelativeLayout>

В приведенном выше XML-изображении измените ImageViewв CheckBox.и отредактируйте ваш getView следующим образом:

Метод GetView в вашем baseAdapter:

    public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            System.out.println("in getView");
             ViewHolder holder;
             if (convertView == null) {
             convertView = mInflater.inflate(R.layout.row, null);
             holder = new ViewHolder();
             System.out.println("After holder");

             holder.name= (TextView) convertView.findViewById(R.id.status);

    //Change this to Checkbox and also add that checkbox in your ViewHolder and edit your implementation as per required.
             holder.heart = (ImageView) convertView.findViewById(R.id.image);
             //do not set on Click Listener if it is a CheckBox
             holder.heart.setOnClickListener(this);


             System.out.println("After holder text");
             convertView.setTag(holder);
             } else {
             holder = (ViewHolder) convertView.getTag();

             System.out.println("in else part");
             }
             //convertView.setBackgroundColor((position & 1) == 1 ? Color.WHITE : Color.LTGRAY);
             System.out.println("After set background");

            if(status.size()>0){
                 holder.name.setText(status.get(position).desc.toString());

             }
             return convertView;
        }

        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId()){
            case R.id.markFav:
                System.out.println("**MARK FAV CLICKED");
                break;


            }
        }

В приведенном выше методе getView измените флажок ImageView на и укажите его всоответствующий идентификатор флажка в вашем row.xml. Также реализуйте свой класс BaseAdapter с помощью onCLickListener, чтобы вы могли получить метод onClick в этом базовом классе адаптера.

Надеюсь, вы меня поняли.За любую путаницу Спросите МЕНЯ ..

Спасибо
sHaH

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