2012-04-23 12 views
8

की दृश्यता को बदल नहीं सकता है मेरे पास ListView भरने के लिए कस्टम कर्सरैडाप्टर का उपयोग करके एक सूची दृश्य है।एक छवि दृश्य

row.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="0dip" 
     android:layout_weight="1" 
     android:layout_height="fill_parent"> 
     <TextView 
      android:id="@+id/title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:gravity="center_vertical" 
      android:ellipsize="marquee" 
      android:textSize="24dp" /> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/artist" 
      android:singleLine="true" 
      android:ellipsize="marquee" 
      android:textSize="14dp" /> 
    </LinearLayout> 
    <ImageView 
     android:id="@+id/currentplaying" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_marginLeft="1dip" 
     android:src="@android:drawable/ic_media_play" 
     android:contentDescription="@string/now_playing" 
     android:visibility="gone" /> 
</LinearLayout> 

आप देख सकते हैं, imageView की दृश्यता चला गया है। मैं इसे एक विशेष पंक्ति के लिए दृश्यमान बनाना चाहता हूं। यहाँ कोड मैंने कोशिश की है लेकिन यह काम कर रहे ...

View view = getListView().getAdapter().getView(0, null, null); 
ImageView iv = (ImageView)view.findViewById(R.id.currentplaying); 
iv.setVisibility(ImageView.VISIBLE); 

अग्रिम धन्यवाद नहीं है।

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if(convertView==null) { 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.yourlayout, null); 
     holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); 
     convertView.setTag(holder); 
    } 
    else { 
     holder=(ViewHolder)convertView.getTag(); 
    } 
    if(position==0) {  
     holder.imgViewLogo.setVisiblity(View.VISIBLE); 
    } 
    return convertView; 
} 

संपादित करें:

मैं काम कर रहा समझ में आ गया। मैंने सूची दृश्य गतिविधि शुरू करने के लिए इसका इस्तेमाल किया।

intent.putExtra("id", c.getInt(c.getColumnIndex(DatabaseHelper._ID))); 
startActivity(intent); 

ListView गतिविधि में,

currentplayingid = getIntent().getExtras().getInt("id");  

तब मैं bindview()

ImageView imgview = (ImageView)view.findViewById(R.id.currentplaying); 
int id = c.getInt(c.getColumnIndex(DatabaseHelper._ID)); 
if (id == SongsListActivity.this.currentplayingid) 
    imgview.setVisibility(View.VISIBLE); 
else 
    imgview.setVisibility(View.GONE); 
+0

iv.set दृश्यता (देखें। VISIBLE) का उपयोग करें; या iv.set दृश्यता (1); काम नहीं कर रहा? –

+0

View.GONE के बजाय View.INVISIBLE का उपयोग करने का प्रयास करें यदि यह आपकी आवश्यकताओं के अनुरूप है। और xml फ़ाइल के बजाय कोड में ऐसा करने का प्रयास करें। –

उत्तर

1

में यह जोड़ा शायद आप अपने एडाप्टर के getView() में यह करना चाहिए

संपादित करें:

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    // codes... 

    if (position == 0) 
    { 
     holder.imgViewLogo.setVisibility(ImageView.VISIBLE); 
    } 
    else 
    { 
     holder.imgViewLogo.setVisibility(ImageView.GONE); 
    } 

    // codes... 
} 
+0

getView() में इसका उपयोग करते समय मुझे जो समस्या मिलती है, हर बार जब मैं स्क्रॉल करता हूं, तो प्रत्येक 0 वीं पंक्ति का चित्र दृश्य स्क्रीन पर दिखाई देता है। – Dipesh

+0

"हर 0 वें पंक्ति" से आपका क्या मतलब है? – candyleung

+0

क्या आप मुझे काम करने के लिए एक उदाहरण दे सकते हैं? – Dipesh

0

आप इस

iv.setVisibility(View.VISIBLE); 
+0

ImageView.VISIBLE के बजाय View.VISIBLE का उपयोग कर काम नहीं कर रहा है। – Dipesh

+0

छवि बटन के लिए क्या? – LomE999

0

तरह यह करने के लिए इस प्रकार निम्नलिखित कोड का प्रयास करें,

 private class ViewHolder 
{ 
    ImageView imgViewLogo; 

} 

    @Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    ViewHolder holder; 
    if(convertView==null) 
    { 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.yourlayout, null); 

     holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); 
     convertView.setTag(holder); 
    } 
    else 
    { 
     holder=(ViewHolder)convertView.getTag(); 
    } 

     if(position==0) 
    {  
    holder.imgViewLogo.setVisiblity(View.VISIBLE); 
     } 


    return convertView; 
} 

यह मेरे लिए काम करता है है ... यह आप मदद कर सकते हैं।

+0

मैं नहीं चाहता कि यह तब होता है जब कोई सूचीकरण क्लिक किया जाता है। जब सूचीदृश्य प्रदर्शित होता है तो मैं एक पंक्ति के लिए छवि दृश्य दृश्यमान बनाना चाहता हूं। – Dipesh

+0

क्षमा करें, मैंने आपकी आवश्यकता को गलत तरीके से समझा है। अद्यतन उत्तर की जांच करें। – deepa

+0

मेरे पास मेरी पंक्ति में दो टेक्स्टव्यू हैं I ऊपर मेरी row.xml देखें। वे अब कोई पाठ प्रदर्शित नहीं करते हैं। और जब मैं सूची को स्क्रॉल करता हूं, तो छविदृश्य कुछ अन्य पंक्तियों के लिए दृश्यमान होता है जो मुझे लगता है कि पिछले जवाब में जोएल स्केपनेक द्वारा उल्लिखित रीसाइक्लिंग के कारण है। – Dipesh

0

मैं ऐसी ही समस्याओं में भाग गया जहां कई पंक्तियां कुछ पंक्तियों के लिए दिखाई देंगी लेकिन दूसरों के लिए नहीं। समस्याओं को रीसाइक्लिंग देखने के कारण थे। मुझे बिल्कुल यकीन नहीं है कि यह आपकी समस्या है, लेकिन आपको इसे किसी भी तरह से संभालना चाहिए। यह चाल हर पंक्ति के लिए दृश्यता सेट करना है; केवल उस पंक्ति के बजाय जिसे आप दिखाना/गायब करना चाहते हैं।

तो:

if (position == 0) 
{ 
    iv.setVisibility(ImageView.VISIBLE); 
} 
else 
{ 
    iv.setVisibility(ImageView.GONE); 
} 

अन्यथा, आप 0 दृश्यता चला गया है के अलावा अन्य पदों के लिए यह सोचते रहे हैं कि लेकिन उस दृश्य रीसाइक्लिंग के साथ ऐसा नहीं हो सकता है। मैं इस काम को बाइंडव्यू में करता हूं, वैसे भी। सुनिश्चित नहीं है कि यह तकनीकी रूप से सही है या नहीं।

+0

मैं bindView() में स्थिति कैसे ढूंढूं? – Dipesh

0

यदि यह कुछ समय काम कर रहा है तो मैं आपकी मदद कर सकता हूं। क्या होता है जब भी आप सूची को ले जाते हैं, यह इस मामले में फिर से सभी विचारों को दोबारा शुरू करता है, यह कभी भी अंतिम स्थिति को सहेजता नहीं है। तो आपको अपने प्रत्येक छविदृश्य की स्थिति को बचाने के लिए और getView() में आपको क्या करना है, इसके अनुसार आपको अपने उत्तर में से एक पोस्ट कर रहा हूं, यह आपकी मदद कर सकता है। आपकी सहायता के लिए यहां एक छोटा कोड है: मैं एक बूलियन सरणीसूची तैयार करूंगा।

निजी ArrayList imageview_visible = null;

तब मैं अपने निर्माता के रूप में झूठी सब imageView के राज्यों सेट हो जाएगा:

for (int i=0; i < no_of_elements.size(); i++) { 
    imageview_visible.add(i, false); 
} 

अपने getView में इस कोड को लिखें:

सार्वजनिक देखें getView (पूर्णांक स्थिति, देखें convertView, ViewGroup माता पिता)

{ // अपने कोड

if (imageview_visible.get(position) == true) 
{ 
    //SET YOUR IMAGE VIEW AS VISIBLE 
} else { 
    // SET IMAGEVIEW AS GONE 
} 

लिखें}

जब भी आप को सामने लाने या आपके विचार को छिपाने सिर्फ imageview_visible.set (सही या गलत) आप के इस राज्य की बचत होगी सभी imageView और हर छवि दृश्य तदनुसार

0

उपयोग LayoutInflater दृश्य वस्तु

LayoutInflater inflater = this.getLayoutInflater(); 
View rowView = inflater.inflate(R.layout.row, null, true); 
ImageView iv = (ImageView)view.findViewById(R.id.currentplaying); 
iv.setVisibility(ImageView.VISIBLE); 
प्राप्त करने के लिए सेट में इसे सहेजें
+0

देखें ऑब्जेक्ट परिभाषित नहीं किया गया है। – zygimantus

2

मुझे यह काम मिल गया। मैंने सूची दृश्य गतिविधि शुरू करने के लिए इसका इस्तेमाल किया।

intent.putExtra("id", c.getInt(c.getColumnIndex(DatabaseHelper._ID))); 
startActivity(intent); 

सूचीदृश्य गतिविधि में,

currentplayingid = getIntent().getExtras().getInt("id");  

तब मैं bindview में यह जोड़ा()

ImageView imgview = (ImageView)view.findViewById(R.id.currentplaying); 
int id = c.getInt(c.getColumnIndex(DatabaseHelper._ID)); 
if (id == SongsListActivity.this.currentplayingid) 
imgview.setVisibility(View.VISIBLE); 
else 
imgview.setVisibility(View.GONE); 
+0

आप इस प्रश्न को उत्तर के रूप में चिह्नित कर सकते हैं ... :-) – Greenonline

0

मैं एक ही मुद्दा ... मैं एक गैर standar समाधान के साथ हल, लेकिन मेरे लिए काम किया ...

v.setImageResource(R.color.transparent); 

आईएम एंड्रॉयड

import android.R; 
0

दोनों iv.setVisibility(View.VISIBLE); और iv.setVisibility(ImageView.VISIBLE); से पोर्टिंग आर correcte हैं, लेकिन यह उपयोग करने के लिए View बजाय ImageView क्योंकि VISIBLE & GONEView कक्षा में परिभाषित कर रहे हैं बेहतर है।

आप if में दोनों दृश्यता (VISIBLE या GONE) को सबसे अधिक बदलते हैं। जैसे:

if(?) 
    iv.setVisibility(View.VISIBLE); 
else iv.setVisibility(View.GONE); 
0

आप सेट दृश्यता (int) का उपयोग करके दृश्य छुपा या दिखा सकते हैं। iv.setVisibility(View.VISIBLE);

संबंधित मुद्दे