2015-12-15 2 views
0

Это мой onItemClickListener МетодНевозможно изменить TextView при нажатии в ListView

//list item listener 
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     LinearLayout parent = (LinearLayout) view; 
     TextView t = (TextView) parent.findViewById(R.id.grocery_item_name); 

     t.setText("Something"); 
} 

Edit: Это класс адаптера

код для вызова адаптера:

adapter = new CustomList(this,R.layout.listitems_improved,Items); 

listview.setAdapter(adapter); 

private class CustomList extends ArrayAdapter{ 

     ArrayList<Item> items; 
     Activity myActivity; 
     LayoutInflater layoutinflater; 
     View myview; 

     public ProductsCustomList(Context context, int resource, ArrayList<item> i) { 
      super(context, resource, p); 
      this.items = i; 
      this.myActivity = (Activity) context; 
     } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      //Inflate the custom row layout in the view 
      layoutinflater = myActivity.getLayoutInflater(); 
      myview = layoutinflater.inflate(R.layout.groceryitems_custom_listview, null); 

      //instantiate the views in custom row layout 
      TextView tv = (TextView) myview.findViewById(R.id.tv); 

      tv.setText(items.get(position).getItemName()); 


      return myview; 
     } 
} 

Когда я вызываю эту строку t.setText("Something"); textview не изменяется в ListView, ничего не происходит. Почему здесь не разворачивается?

+0

печать то, что находится внутри ' items.get (position) .getItemName() ', may getItemName пуст – diogojme

+0

После' t.setText («Something»); 'use' yourAdapter.notifyDataSetChanged(); ' – diogojme

+0

@diogojme Текст уже установлен в ListView, я хочу изменить e text после того, как он был установлен, нет ничего плохого в 'getItemName()' method – yousafkh

ответ

1

Вы можете сделать что-то вроде этого:

final Adapter yourAdapter = new Adapter(context, items); 

listview.setAdapter(yourAdapter); 

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){ 

    //change value for item select 
    items.get(i).setItemName("yourText"); 

    yourAdapter.notifyDataSetChanged(); 
    //if the this line don't refresh the list, you can recreate adapter: 
    //listview.setAdapter(new Adapter(context, items); 

} 

С уважением.

+0

Это делает трюк, но это будет невозможно, когда список Огромный, а во-вторых, он также изменяет значение объекта, я хочу изменить текстовое представление, сохраняя исходные значения в 'items' – yousafkh

0

Вы также можете попытаться включить слушателя в адаптере: метод

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     //Inflate the custom row layout in the view 
     layoutinflater = myActivity.getLayoutInflater(); 
     myview = layoutinflater.inflate(R.layout.groceryitems_custom_listview, null); 

     //instantiate the views in custom row layout 
     TextView tv = (TextView) myview.findViewById(R.id.tv); 

     tv.setText(items.get(position).getItemName()); 


     tv.setOnClickListener(new View.OnClickListener(){ 
       @Override 
       public void onClick(View arg0){     
        tv.setText("selected");     
       }    
     }); 


     return myview; 
    } 
1

Пожалуйста, попробуйте это в GetView() в классе адаптера:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      //Inflate the custom row layout in the view 
      layoutinflater = myActivity.getLayoutInflater(); 
      myview = layoutinflater.inflate(R.layout.groceryitems_custom_listview, null); 

      //instantiate the views in custom row layout 
      TextView tv = (TextView) myview.findViewById(R.id.tv); 
      tv.setText(items.get(position).getItemName()); 


      myview.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       TextView view = (TextView) v.findViewById(R.id.your_text_id); 
       view.setText("text_changed"); 
      } 
     }); 


      return myview; 
     } 
0
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     LinearLayout parent = (LinearLayout) view; 
     TextView t = (TextView) parent.getChilldId(i).findViewById(R.id.grocery_item_name); 

     t.setText("Something"); 
} 
Смежные вопросы