Android Java:根据内容更改listview中的图像

时间:2012-02-05 10:12:53

标签: java android image listview user-interface

经过一场没有运气的谷歌搜索后,我再来这里打扰你们所有人:)

我的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是今天的下一个日期....

我怎么能这样做,或者......哪里有可以使用的Overide?我在这个简单的项目上学习java,因为我正在这样做,所以要温柔:)

谢谢大家, 维拉德

2 个答案:

答案 0 :(得分:1)

再次......

构建使用您的数据的自定义适配器......

  

每当你想用ListView中的视图进行处理时   需要创建一个可以处理逻辑的自定义适配器   实现并在必要时将该信息传递给视图。

示例

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

答案 1 :(得分:0)

以下是我的代码的摘录。我在我的许多项目中使用它,从数据库收集数据并在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)
        }
   }     

}

}