Android Java: изменение изображения в списке в зависимости от содержимого - PullRequest
0 голосов
/ 05 февраля 2012

после долгого поиска в Google без удачи я прихожу сюда снова, чтобы беспокоить вас всех:)

У меня есть ListView, который в моем приложении, которое заполняется через SQLitle db из курсора .. выглядит так:

public void updateShiftList(String x) {
    db.openToRead();

    listShifts = (ListView) findViewById(R.id.listShifts);

    // get data

    cursor = db.getPlan(x);
    startManagingCursor(cursor);
    // set adapter
    String[] from = { dataManager.KEY_SHIFT, dataManager.KEY_DATE };
    int[] to = { R.id.rowShift, R.id.rowDate };

    adapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);

    listShifts.setAdapter(adapter);
    db.close();

}

в row.xml У меня есть изображение перед каждой строкой, и я хотел бы реализовать функцию или метод проверки во время создания этого ListView, который бы изменял изображение в зависимости от некоторых параметров, которые я бы протестировал, например, R.id.rowDate == TodayDate (в этом текстовом поле есть дата) или если R.id.rowDate является следующей датой с сегодняшнего дня ....

Как я могу это сделать, или где ... есть ли некоторыеОверид, что можно было использовать?Я изучаю Java на этом простом проекте, так как я делаю это, так что будьте осторожны :)

Спасибо всем, Влад

Ответы [ 2 ]

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

И снова ...

Создайте собственный адаптер, который использует ваши данные ...

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

Пример

http://android.vexedlogic.com/2011/04/02/android-lists-listactivity-and-listview-ii-%E2%80%93-custom-adapter-and-list-item-view/

0 голосов
/ 05 февраля 2012

Ниже приведена выдержка из моего кода. Я использую его во многих моих проектах, которые собирают данные из базы данных и отображают их в ListView. Оно работает. Вы должны немного адаптировать его к вашему проекту. В любом случае, я бы порекомендовал переписать ваш код. Изображение внизу:

package my.package;

import android.app.Activity;


public class MyActivity extends Activity {


private DBAdapter mDb;

private ListView mListView;
private Cursor mCursor;   



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.groups_list);       

    mDb = new DBAdapter(this);
    mDb.open();       

    populateListView();
}    

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

    if(mCursor != null)
        mCursor.close();
    mCursor = null;

    if(mDb != null)
        mDb.close();        
    mDb = null;       
}    


private void populateListView(){        

    if(mCursor!=null)  //close the old one first
        mCursor.close();
    mCursor = mDb.getSomeDataCursor();                

    MainAdapter adapter = new MainAdapter(this, R.layout.groups_list_item, mCursor, false);        
    mListView.setAdapter(adapter);
}    


 private class MainAdapter extends ResourceCursorAdapter{

    private int mLayout;
    private int mColumnIndexGroup;

    public MainAdapter(Context pContext, int pLayout, Cursor pCursor, boolean pAutoRequery) {
        super(pContext, pLayout, pCursor, pAutoRequery);

        mLayout = pLayout;
        mColumnIndexGroup = (pCursor.getColumnIndex(DBAdapter.COL_NAME)); 
    }        

    @Override
    public View newView(Context pContext, Cursor pCursor, ViewGroup pParent) {
        LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        return li.inflate(mLayout, pParent, false);
    }        

    @Override
    public void bindView(View pView, Context pContext, Cursor pCursor) {           
        TextView tvGroup = (TextView)pView.findViewById(R.id.groupsListTVGroup);
        tvGroup.setText(pCursor.getString(mColumnIndexGroup));

        //Image stuff - an example
        if(pCursor.getInt(pCursor.getColumnIndex(SOMETHING)) == SOME_VAL){
            ImageView img = (ImageView) pView.findViewById(R.id.myImage);
            img.setImageResource(R.drawable.myImage)
        }
   }     

}

}

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