Android: ячейка ListView, кажется, рисует неправильно - PullRequest
0 голосов
/ 21 марта 2012

Я уверен, что я делаю что-то глупое, но я действительно запутался по этому поводу ...

Большая часть этого кода взята из замечательных ответов на StackOverflow….

В приведенном ниже коде - я получаю строку неисправности, показанную в верхней части строки тревоги, но определение ячейки помещает строку тревоги сверху.

Моя ячейка: alarm_list_row

<?xml version="1.0" encoding="utf-8"?>                       
<LinearLayout                                                 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"                       
    android:layout_height="wrap_content"                      
    android:padding="10dp"                                    
    android:orientation="vertical"                            
    >                                                         

    <TextView                                                 
        android:id="@+id/ar_alarm_text"                       
        android:layout_width="wrap_content"                   
        android:layout_height="wrap_content"                  
        android:text="@+strings/alarm_dummy" />               

    <TextView                                                 
        android:id="@+id/ar_trouble_text"                     
        android:layout_width="wrap_content"                   
        android:layout_height="wrap_content"                  
        android:text="@+strings/trouble_dummy" />             

</LinearLayout>  

Я использую адаптер, расширенный от ArrayAdapter

public class ComfortListAlarmArrayAdapter extends ArrayAdapter<StringPair> {         
    private final Context context;                                                     
    private final ArrayList<StringPair> items;                                         

    //Constructors                                                                     
    public ComfortListAlarmArrayAdapter(Context context, ArrayList<StringPair> items) {
        super(context, R.layout.comfort_alarm_cell);                                     
        this.context = context;                                                          
        this.items = items;                                                              
    }                                                                                  

    private class AlarmViewHolder {                                                    
        public TextView alarm;                                                           
        public TextView trouble;                                                         
    }                                                                                  

    private AlarmViewHolder alarmHolder;                                               


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

        if(rowView == null){                                                             
            LayoutInflater inflater = (LayoutInflater) context                             
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);                        
            rowView = inflater.inflate(R.layout.alarm_list_row, parent, false);            
            alarmHolder = new AlarmViewHolder();                                           
            alarmHolder.alarm = (TextView) rowView.findViewById(R.id.ar_alarm_text);       
            alarmHolder.trouble = (TextView) rowView.findViewById(R.id.ar_trouble_text);   
            rowView.setTag(alarmHolder);                                                   

            //          LayoutInflater inflater = context.getLayoutInflater();                 
//          rowView = inflater.inflate(R.layout.comfort_list_row, null, true);           
        } else alarmHolder = (AlarmViewHolder) rowView.getTag();                         


        StringPair alarm = items.get(position);                                          
        if (alarm != null) {                                                             
            alarmHolder.alarm.setText(alarm.getAlarm());                                   
            if (alarm.getTrouble().trim().length() == 0) {                                 
                alarmHolder.trouble.setText(" ");                                            
                //alarmHolder.trouble.setVisibility(android.view.View.INVISIBLE);            
            } else {                                                                       
                alarmHolder.trouble.setText(alarm.getTrouble());                             
                //alarmHolder.trouble.setVisibility(android.view.View.VISIBLE);              
            }                                                                              
            Log.v("Alarm View", alarm.getAlarm()+"/"+alarm.getTrouble());                  
        }                                                                                
        rowView.setBackgroundColor(Color.BLACK);                                         
        return rowView;                                                                  
    }                                                                                  


    /* (non-Javadoc)                                                                   
     * @see android.widget.ArrayAdapter#getCount()                                     
     */                                                                                
    @Override                                                                          
    public int getCount() {                                                            
        return items.size();                                                             
        //return super.getCount();                                                       
    }                                                                                  

}                                                                                    

и он используется в AlarmActivity

public class AlarmActivity extends Activity implements MessageThumper{                                                   

    private ComfortListAlarmArrayAdapter alarmListAdapter;                                                                 
    private final int AA_NEW_MESSAGE = 1;                                                                                  

    CommunicationsController getComms()                                                                                    
    {                                                                                                                      
        ComfortApp main = (ComfortApp) getApplicationContext();                                                              
        return main.Comms;                                                                                                   
    }                                                                                                                      

    /** Called when the activity is first created. */                                                                      
    @Override                                                                                                              
    public void onCreate(Bundle savedInstanceState) {                                                                      
        super.onCreate(savedInstanceState);                                                                                  
        setContentView(R.layout.alarms);                                                                                 
        final ListView lv_1  = (ListView) findViewById(R.id.alarm_list);                                                     

        alarmListAdapter = new ComfortListAlarmArrayAdapter(AlarmActivity.this, getComms().am_alarmStuff);                   
        lv_1.setAdapter(alarmListAdapter);                                                                                   
    }                                                                                                                      

    Handler alarmUpdateHandler = new Handler(){                                                                            

            @SuppressWarnings("unchecked")                                                                                     
            @Override                                                                                                          
            public void handleMessage(Message msg) {                                                                           
                if(msg.what == AA_NEW_MESSAGE){                                                                                  
                    //update all adapters                                                                                          
                    ((ComfortListAlarmArrayAdapter)((ListView) findViewById(R.id.alarm_list)).getAdapter()).notifyDataSetChanged();
                }                                                                                                                
                super.handleMessage(msg);                                                                                        
            }                                                                                                                                                                                      
    };                                                                                                                                                                                                                                                 

    public void passMessage(String msg, String p1, String p2) {                                                            
        if (msg.equals("NEW_ALARM"))                                                                                         
        {                                                                                                                    
            Message M = new Message();                                                                                         
            M.what = AA_NEW_MESSAGE;                                                                                           
            this.alarmUpdateHandler.sendMessage(M);                                                                            
        }                                                                                                                    
    }                                                                                                                      
}      

если мой logCat показывает

03-22 01:25:42.112: I/CommsController:setAlarm(26655): System Armed,Code 240

the cell shows
    ------------
    Code 240
    System Armed
    ------------

Может кто-нибудь указать, что я пропускаю?

Прошу прощения за дополнительную сложность - сообщение, передаваемое из потока сообщений и т. Д., Осталось в нем, но в сообщении журнала должно быть указано, что строки находятся в правильных местах….

1 Ответ

0 голосов
/ 21 марта 2012

Я предполагаю, что проблема в том, что LogCat показывает System Armed, затем код, в то время как строка показывает код, а затем System Armed.Если это проблема, то вам нужно взглянуть на макет enter code here alarm_list_row и убедиться, что вы правильно назвали TextView s.

...