0

からコンテンツを取得ViewBinderする にアイテムを保持するためにを作成しました。この中に があります。私はリストを正常に取得しましたが、データベースから別のデータベースに文字列を持ち込むイベントに応答しません。それが私が抱えている問題です。ListViewSimpleCursorAdapterImageButtonImageButtononclickActivity

public class ChannelViewBinder implements SimpleCursorAdapter.ViewBinder {
    private ChannelDB mDB;
        public boolean setViewValue(View view, final Cursor cursor, int columnIndex) {
            final Context mContext = null;
                if(view instanceof ImageView) {
                        ImageView iv = (ImageView) view;
                        byte[] img = cursor.getBlob(columnIndex);
                        iv.setImageBitmap(BitmapFactory.decodeByteArray(img, 0, img.length));
                        return true;
                }

              if(view instanceof ImageButton) {
                           ImageButton ib = (ImageButton) view;
                        ib.setOnClickListener(new  View.OnClickListener() {     
                            @Override
                            public void onClick(View v) {

                                String dblink = cursor.getString(cursor.getColumnIndex(mDB.KEY_DBLINK));
                                Intent intent = new Intent();
                                intent.setClass(mContext, Doubanframe.class);
                                Bundle bunde = new Bundle();
                                bunde.putString("dblink",dblink);
                                intent.putExtras(bunde);
                                }
                            });

                }
                return false;
        }
}

以下は私の MainActivityクラスです:

private Button likebutton;
    private ImageButton about;
    private ChannelDB mDB;
    private ListView channellist;
    private Cursor c;


    @Override    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        likebutton=(Button) findViewById(R.id.share);
        about =(ImageButton)findViewById(R.id.about);
        channellist = (ListView) findViewById(R.id.Channel);

        mDB = new ChannelDB(this);

        String[] columns = {mDB.KEY_ID, mDB.KEY_POSTER, mDB.KEY_CHANNEL, mDB.KEY_PATH, mDB.KEY_DBLINK};
        String   table   = mDB.channelS_TABLE;

        c = mDB.getHandle().query(table, columns, null, null, null, null, null);

        startManagingCursor(c);

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                R.layout.channelview,
                c,
                new String[] {mDB.KEY_POSTER, mDB.KEY_CHANNEL, mDB.KEY_DBLINK},
                new int[] {R.id.poster, R.id.channel, R.id.douban});

        adapter.setViewBinder(new ChannelViewBinder());

        channellist.setAdapter(adapter);

        channellist.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                c.moveToPosition(position);
                Intent intent = new Intent();
                intent.setClass(HDtvs.this,Showlist.class);
                intent .putExtra("path",mDB.KEY_PATH);
                intent .putExtra("cname",mDB.KEY_CHANNEL);
                intent .putExtra("dblink",mDB.KEY_DBLINK);
                startActivity(intent);
            }
        }); 
}
4

1 に答える 1

2

あなたの onClickListener でImageButton新しいを作成してIntentいますが、呼び出していないようstartActivityです? そのためには、ある種のコンテキストへの参照が必要です。あなたの変数はその良い候補のようですが、コードスニペットmContext以外に設定されていることはわかりません。null

クラスのコンストラクターを作成することにより、有効なコンテキストへの参照を簡単に追加できますChannelViewBinder

public class ChannelViewBinder implements SimpleCursorAdapter.ViewBinder {
    private Context mContext = null;

    public ChannelViewBinder(Context context) {
        mContext = context;
    }
...
}

後でそれを使用してmContext.startActivity(intent)、ImageButton の onClick を呼び出すことができます。adapter.setViewBinder(new ChannelViewBinder(this))明らかに、クラスthisを参照するオブジェクトのインスタンス化も変更する必要があります。MainActivity

于 2011-12-02T07:13:49.333 に答える