2017-02-20 38 views
0

プログラムでリストビュー内の選択した行の背景色を取得する必要があります。 私は行を着色するためにこれを書いた:リストビューで選択した行の背景色を取得する

View v;  
v.setBackgroundColor(context.getResources().getColor(R.color.childArticle)); 

しかし、私はこのような何かをしなければならないので、私は、行の色を取得する方法を見つけ出すことはできません。

colorOfSelectedRow = v.getBackgroundColor(); 
if(colorOfSelectedRow == MY_COLOR) { 
    // Do something 
} 

ありがとうございました!

EDIT: 私は押された行の色を知っていますが、すべての行が同じ色で色付けされているわけではありません!

+0

は、その後、あなたがその色を知らない、あなたをいけませんか? –

+3

私はあなたの答えはすでに答えていると思う[ここ](http://stackoverflow.com/questions/14779259/get-background-color-of-a-layout) –

+0

いいえ!すべての行が色付きではありませ –

答えて

1

あなたは以下のようにタグ内に背景色IDを設定してもタグにcolor.xml

最初のセットのカラーコードIDに記載されている色のIDを取得することができます。あなたは、背景色を取得したいとき

view.setTag(R.color.childArticle); 

次にビューからタグを取得し、その値を解析し、color.xmlファイルからカラーコードを取得します。

int ColorId = Integer.parseInt(view.getTag().toString()); 
+0

と私はどのように色を得ることができますか?私はそれを押すと、私のリストビューで選択された行の色を取得する必要があります。私はこれを試しました: 'ColorDrawable viewBackground =(ColorDrawable)listViewOrder.getBackground(); int colorId = viewBackground.getColor(); 'しかし、** - 1 ** .. –

+0

のタグを設定する必要があります。タグはカラーコードIDを保持していますので、カラーコードからカラーにアクセスできます。 –

+0

あなたのコードは私には常に同じ色を与えますが、背景色がなく、赤色の背景色を持つ行があります。私は行を押すと、選択された行が赤かどうかを知りたいと思います。あなたのコードで私はいつも同じ結果を持っています –

0

このコードでは、クリックされた行の色文字列が出力されるか、または色の背景が設定されていない場合は何も出力されません。しかし、あなたはどのように背景色を設定するかを指定していませんでした。

ListView listView = (ListView) findViewById(R.id.listView); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
adapter.add("Blue"); 
adapter.add("None"); 
adapter.add("Red"); 
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    int color; 

    Drawable background = view.getBackground(); 
    if (background instanceof ColorDrawable) { 
     color = ((ColorDrawable) background).getColor(); 
     Log.d("MainActivity", Integer.toHexString(color)); 
    } 
    } 
}); 
listView.setAdapter(adapter); 
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    listView.getChildAt(0).setBackgroundColor(ContextCompat.getColor(MainActivity.this, android.R.color.holo_blue_dark)); 
    listView.getChildAt(2).setBackgroundColor(ContextCompat.getColor(MainActivity.this, android.R.color.holo_red_dark)); 
    } 
}); 
+0

EDIT:常に "ffffffff"を返します。選択した行は確かですか? –

+0

更新された回答を確認できますか?クリックされた行のためのものですが、選択した行に変更することができます。いつあなたはその色を手に入れたいですか?いくつかの行が選択されているときに、をクリックしますか? – Agraphie

+0

私は実際にlistViewリスナーの外出先です。ボタンをクリックすると想像してみてください。リストビューで選択した行の色が表示されます。私はどのようにsetOnItemClickListenerの外側からリストビューの現在選択されている行の色を取得するか分からない! –

0
final int MY_COLOR = R.color.childArticle; 
View v;  
v.setBackgroundColor(context.getResources() 
.getColor(R.color.childArticle)); 
view.setTag(R.color.childArticle); 
Integer colorOfSelectedRow = (Integer) v.getTag(); 
if(colorOfSelectedRow == MY_COLOR) { 
// Do something 
} 

使用この..あなたは、同じ色ですべての項目を設定した場合

関連する問題