2015-01-28 3 views
-2

Привет, я разрабатываю приложение для простого списка дел ... и я столкнулся с этой проблемой. Я хочу показать флажок Динамически, но так как я создал его в своем xml со следующими атрибутами. ..Это автоматически отображаются и <CheckBox android:visibility="gone" android:layout_marginLeft="5dp" android:layout_marginTop="0dp" android:layout_width="353dp" android:layout_height="wrap_content" android:id="@+id/checkBox" android:checked="false" /> , когда я играл с ним, я понял, что первая строка элемента ListView показываются screen 1Как показать флажок, только когда getView() называется

screen2 screen3 notice a line below the button

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

static class ViewHolder{ 
    TextView textView; 

    ViewHolder(View v){ 
     textView = (TextView) v.findViewById(R.id.textView); 
    } 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row= convertView; 
    ViewHolder holder = null;CheckBox checkBox; 
    if(row == null){//1st time 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.single_row,parent,false); 
     holder = new ViewHolder(row); 
     row.setTag(holder); 
    } 
    else{//recycling 
     holder = (ViewHolder) row.getTag(); 
    } 
    MainActivity.Task singleTask= list.get(position); 
    holder.textView.setText(singleTask.getNote()); 

     checkBox = (CheckBox) row.findViewById(R.id.checkBox); 
    //if(position >=0) 
     // checkBox.setVisibility(View.VISIBLE); 

    return row; 
} 

это мой класс arrayAdapter ... , пожалуйста, помогите мне с этим ... спасибо заранее !!

+0

в xml не размещать ни одного ребенка в списке. сделайте xml-макет с текстовым полем и флажком, раздуйте это представление и купите listview с этим завышенным видом –

+0

я уже это сделал! –

+0

или может быть, я не понял, что сказал! не могли бы вы объяснить немного! –

ответ

1

Вы должны использовать пользовательские ListView, с пользовательскими ListView элементы, имеющие флажок и текстовое поле ....
Вы можете увидеть учебник here и here.

Использование пользовательских ListView будет правильным и правильный подход.

И удачи с первым андроидом приложением;)

+0

спасибо за ваш ответ, но это не сработало .. !! –

+0

if (holder.textView.getText(). ToString(). IsEmpty()) return null; Я пробовал что-то вроде этого !!, но все еще не работает –

+2

почему вы не используете что-то вроде http://www.mysamplecode.com/2012/07/android-listview-checkbox-example.html – Salmaan

0

Я думаю, это не проблема компоновщика но Apdater

Что возвращаемое значение функции GetCount?

Вы не обеспечиваете детали коды, так что я думаю, если первый раз INIT ListView, является GetCount возвращение 1, и в GetView паров convertView имеет нулевое значение, в это время размере списка должен быть 0, поэтому когда вы вызываете singleTask.getNote() не выбрасывают исключение?

Может быть, вы можете просто LogCat в каком-то месте, он может найти проблему

  • list.size() =?
  • единыйTask - null?
  • одиночныйTask.getNote() возврат - null?
  • getCount() return =?
1

Что-то вроде этого, изменить код для ваших нужд, важно, что вы возвращаете размер списка в GetCount() и GetItem возвращает текущий элемент.
Я предпочитаю передавать список и контекст конструктору адаптера.

public class TasksListAdapter extends BaseAdapter { 
    private Context mContext; 
    private List<Task> mTasksList; 

    public TasksListAdapter(Context context, List<Task> tasksList) { 
     this.mContext = context; 
     this.mTaskList = tasksList; 
    } 
    private static class ViewHolder { 
     TextView text; 
     CheckBox check; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     final ViewHolder holder; 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater)getSystemService(this.mContext.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.single_row, parent, false); 

      holder = new ViewHolder(); 
      holder.text = (TextView) convertView.findViewById(R.id.textView); 
      holder.check = (CheckBox) convertView.findViewById(R.id.checkBox); 
      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.text.setText(this.mTasksList.get(position).getNote()); 

     return convertView; 
    } 

    @Override 
    public int getCount() { 
     return this.mTasksList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return this.mTasksList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 
Смежные вопросы