2015-05-17 4 views
0

Я пытаюсь скрыть/показать изображение из пользовательской базы списка в условии. Тем не менее, попытка использования приведенного ниже кода не скрывает/не показывает изображение на основе условия. Как вы можете видеть ниже в mainactivity.java У меня есть строка переменной сообщение теперь внутри метода частных ArrayList generateData() я поставил сообщение = nopic/сообщение = yespic. Я передаю значение String (значение сообщения) в свой пользовательский адаптер. Затем внутри моего пользовательского адаптера, если сообщение == "nopic" скрывает изображение из списка, показывается показ изображения в listview.Скрыть/показать ImageView из списка

Я пробовал следующий код, но он не скрывает изображение, а не все изображения.

Можете ли вы помочь мне достичь этого, пожалуйста,

mainactivity.java

public class MainActivity extends ActionBarActivity 

{

private String[] fruits = 
    { 
     "Apple", "Mango", "Banana", "Grapes", "Straberries", "Pineapple", "Berry" 
    }; 

private String message; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ArrayList<Item> items=generateData(); 

    MyAdapter adapter=new MyAdapter(getApplicationContext(),items, message); 
    final ListView listview = (ListView) findViewById(R.id.listView1); 
    listview.setAdapter(adapter); 

} 
private ArrayList<Item> generateData() 
{  
    MyAdapter adapter=new MyAdapter(getApplicationContext(),null, null); 

    ArrayList<Item> items = new ArrayList<Item>(); 
    for(int i=0; i<fruits.length; i++) 
    { 

     if(fruits[i].toString().equals("Grapes")) 
     { 
      message = "nopic"; 
      items.add(new Item("Grapes sweet", null)); 
      adapter.notifyDataSetChanged(); 
     } 
     else 
     { 
      message = "yespic"; 
      items.add(new Item(fruits[i].toString(), null)); 
      adapter.notifyDataSetChanged(); 
     } 
    }    
    return items;  
} 

MyAdapter.java

public class MyAdapter extends ArrayAdapter<Item> { 

    private final Context context; 
    private final ArrayList<Item> itemsArrayList; 
    public String message; 

    public MyAdapter(Context context, ArrayList<Item> itemsArrayList, String message) { 

     super(context, R.layout.row, itemsArrayList); 

     this.context = context; 
     this.itemsArrayList = itemsArrayList; 
     this.message = message; 

    } 

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


     LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 


     View rowView = inflater.inflate(R.layout.row, parent, false); 


     TextView title = (TextView) rowView.findViewById(R.id.textView1); 
     ImageView pic = (ImageView) rowView.findViewById(R.id.imageView1); 

     title.setText(itemsArrayList.get(position).getTitle()); 
     if(message == "nopic") 
     { 
      pic.setVisibility(View.GONE); 

     } 
     if(message == "yespic") 
     { 
      pic.setVisibility(View.VISIBLE); 
      pic.setImageResource(R.drawable.abc_ic_voice_search); 
     } 

     return rowView; 

    } 
+0

'if (message ==" nopic ")'. Вы имеете в виду: 'if (message.equals (" nopic ")). 'inside mainactivity.java' Пожалуйста, не делайте это жирным шрифтом. Вместо этого напишите его как «MainActivity.java». – greenapps

+0

Что такое «адаптер MyAdapter» = новый MyAdapter (getApplicationContext(), null, null); ? И этот адаптер не подключен к вашему элементу ListView. – tomm

+0

В generateData() просто заполните ArrayList и больше ничего не делайте, возвращайте заполненный список из функции generateData(), затем поместите этот список в конструктор Adapter, присоедините адаптер к ListView и вызовите notifyDataSetChanged – tomm

ответ

1

Вместо

message == "yespic"; 

Попробуйте

message.equals("yespic"); 
0

Вы должны вызвать

adapter.notifyDataChanged(); 

каждый раз, когда вы меняете содержимое ListView.

Смежные вопросы