2015-12-15 54 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"); 
} 

编辑:这是适配器类

代码来调用适配器:

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()',可能getItemName为空 – diogojme

+0

't.setText(“Something”);'use' yourAdapter.notifyDataSetChanged();' – diogojme

+0

@diogojme文本已经在ListView中设置了,我想要改变e文本一旦被设置,'getItemName()'方法没有什么错误 – 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

这样做的技巧,但它是不可行的,当列表是巨大的,其次它也改变了对象的值,我只想改变textview,同时保留原始值在'项目' – 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"); 
} 
相关问题