2012-03-19 15 views
0

ブックマークとしてマークされたImageViewの状態を変更することに問題があります。ImageView onClickListener()

人は私が持っている新しいOnClickListener()を作成すると言いましたが、ImageViewをクリックするとフォーカスが当たった状態になりますが、クリックすると状態が変わりません。さらに、私がリスト項目をクリックすると、ImageViewに再び焦点が当てられていることがわかりました。次のように私はImageViewの状態のためのXMLを作成している

public class DxSimpleCursorAdapter extends SimpleCursorAdapter { 
Context context; 
Activity activity; 
ImageView image; 

public DxSimpleCursorAdapter(Context context, int layout, Cursor c, 
     String[] from, int[] to) { 
    super(context, layout, c, from, to); 
    this.context=context; 
    this.activity=(Activity) context; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
    View view = super.getView(position, convertView, parent); 
    long id = getItemId(position); 
    final ImageView image = (ImageView) view.findViewById(R.id.fav); 

    image.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v){ 
      image.setBackgroundResource(R.drawable.ic_fav); 

      final Button btn = (Button) v.findViewById(R.id.fav); 
      btn.setPressed(true); 
     } 
    }); 
    return view; 
} 
} 

を::

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/btn_star_off_normal" 
    android:state_checked="false" 
    android:state_window_focused="false" /> 
<item android:drawable="@drawable/btn_star_on_normal" 
    android:state_checked="true" 
    android:state_window_focused="false" /> 

<item android:drawable="@drawable/btn_star_on_pressed" 
    android:state_checked="true" 
    android:state_pressed="true" /> 
<item android:drawable="@drawable/btn_star_off_pressed" 
    android:state_checked="false" 
    android:state_pressed="true" /> 

<item android:drawable="@drawable/btn_star_on_focused" 
    android:state_checked="true" 
    android:state_focused="true" /> 
<item android:drawable="@drawable/btn_star_off_focused" 
    android:state_checked="false" 
    android:state_focused="true" /> 

<item android:state_checked="false" android:drawable="@drawable/btn_star_off_normal" /> 
<item android:state_checked="true" android:drawable="@drawable/btn_star_on_normal" /> 
</selector> 

私の活動の中で、私はどのトーストメッセージを作成するには、以下のOnListItemClick()を作成している私は、私が行方不明ですかわからないですポップアップだけでなく、ImageViewに焦点を当てているようだ。

public void onListItemClick(ListView parent, View view, int position, long id) { 
    SQLiteDatabase db = (new DatabaseHelper(this)).getWritableDatabase(); 
    Cursor c = (Cursor) getListAdapter().getItem(position); 
    String arg = c.getString(c.getColumnIndex("_id")); 
    Cursor cursor = db.rawQuery("Select category, subcategory From DiagLookup Where _id = ?", new String[]{""+arg}); 
    cursor.moveToFirst(); 

    Context context = getApplicationContext(); 
    CharSequence text = "Category: " + cursor.getString(cursor.getColumnIndex("category")) + "\nSubcategory: " + cursor.getString(cursor.getColumnIndex("subcategory")); 
    int duration = Toast.LENGTH_SHORT; 

    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 
} 

私は起こるしたいものを明確に:

私は二つのことをしたいリスト項目があります。アイテムをクリックしてトーストメッセージを受け取り、イメージビューをクリックし、イメージビュー内のブックマークされた状態に、またバックエンドにも切り替えることができます。私はトーストメッセージが作業が、ImageViewのは完全に機能していない持っている瞬間

...

私がクリックしたとき、私はそれがセットアップでどのように表示し、発生しているかを説明するために、リスト項目のスクリーンショットを添付していますさまざまな分野で

ListItem with ImageView clickable

トップリスト項目はをクリックして開催されている上記の私の引き出し可能なXMLに示したように、私が取得することは集束が、unclicked画像への画像の変更ですが、私は星が暗くクリックを終了するとき他の項目はグレーであるが、黄色の星であるクリック状態の画像には変わらない。

私はスター以外の場所をクリックすると、私が出そうとしていたトーストメッセージがポップアップしますが、スターも焦点を合わせるようになります。私はいくつかの継承の問題を抱えているように感じているし、ImageViewのために状態を固執させないように感じる。

答えて

1

このリンクをチェックしてください。

https://stackoverflow.com/a/9754248/1244489

その類似の問題。あなたが実装した方法よりも少し複雑です。

+0

この投稿とそれらの中で言及されたリンクは、XMLビューを使用して状態を変更するためにイメージビューを取得するのに非常に役立ちました。私がそれを固定したのは、アンドロイドを使用するのではなく、drawable xml内でstate_checkedをアンドロイド:state_selectedに置き換えてからview.setSelected(true)に置き換えることでした。 onClick()イベント内で実行されます。 – DeucePie

1

あなたが言っていることは、イメージをクリックしたときにトーストメッセージが表示されるようにしたいということです。

もしそうなら、私はそれを行う方法です。

あなたのXMLでは、まずボタンや画像にonClickを設定していることを確認する必要があります。これを各変数に追加する必要があります。

android:onClick = "Image1" 

次に、あなたのJavaファイルで参照する必要があります。あなたがあなたの活動に

public class DxSimpleCursorAdapter extends SimpleCursorAdapter implements OnClickListener{ 

をOnClickListenerを実装することをお勧めします、あなたはトーストを作成するあなたの方法を行うことができます

public void Image1 (View v) { 
    Toast.makeText(this, R.string.TEXT, Toast.LENGTH_SHORT).show(); 
} 

あなたのjavaファイルでそれを参照するが、鉱山が唯一のコードの1行が含まれています。

これで完全にあなたの質問に答えることはできませんが、これまでAndroid(Java)のコーディングについて知っていることはすべてです。私はこれが役立つことを願っています