2015-06-08 178 views
0

我有使用一個字符串數組如下填充的列表視圖:如何更改項目點擊列表視圖的內容?

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getListView().getContext(),android.R.layout.simple_list_item_1,res); 
getListView().setAdapter(adapter); 

我想改變列表視圖的使用OnItemClickListener內容。

+0

你會得到一個列表,當你通話然後編寫getListView onItemClickListerner()爲此,您可以獲取列表項的位置,之後您可以根據位置更改代碼。 – Hanuman

+0

假設在onClick我想填充列表使用不同的數組說arr1.What我寫在OnItemClickListener? – ssm

+0

你的問題沒有顯示你爲解決你的問題而付出的努力。請自行研究教程和代碼示例,並返回更詳細和具體的問題。 – Egor

回答

0

根據您希望進行更改的方式,您是希望用戶通過輸入進行更改,還是希望通過代碼直接進行更改。以下setOnItemClickListener將新值設置爲變量。 爲了從用戶處獲得輸入,您需要將其填充到片段或新活動中,從用戶處獲取輸入並提交這些更改,刷新列表並顯示更新的數據。

模型類:

public class Item { 

    private String name = ""; 

    public Item() { 
    } 

    public Item(String name){ 
     this.name = name; 
    } 

    public String getItemName() { 
     return name; 
    } 

    public void setItemName(String name) { 
     this.name = name; 
    } 

} 

適配器類:

public class ItemAdapter extends ArrayAdapter<Item> { 

    private List<Item> itemList = new ArrayList<Item>(); 
    Context context; 

    @Override 
    public void add(Item object) { 
     itemList.add(object); 
     super.add(object); 
    } 

    public ItemAdapter(List<Item> rList, Context context) { 
     super(context, android.R.layout.simple_list_item_1); 
     this.context = context; 
     this.itemList = rList; 
    } 

    private class ViewHolder { 
     TextView txtItemName; 
    } 

    public int getCount() { 
     return this.itemList.size(); 
    } 

    public Item getItem(int index) { 
     return this.itemList.get(index); 
    } 

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

     ViewHolder holder = new ViewHolder(); 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.list_item, parent, false); 

      holder.txtItemName = (TextView) convertView.findViewById(R.id.txtItemName); 

      convertView.setTag(holder); 
     } else 

      holder = (ViewHolder) convertView.getTag(); 

     Item item = getItem(position); 

     holder.txtItemName.setText(item.getItemName()); 

     return convertView; 
    } 

} 

活動類:

public class ItemActivity extends Activity { 

    private ListView listView; 
    private ItemAdapter itemListAdapter; 
    private List<Item> itemList = new ArrayList<Item>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.list); 

     listView = (ListView) findViewById(R.id.listView); 

     itemListAdapter = new ItemAdapter(itemList, this); 
     listView.setAdapter(itemListAdapter); 
     listView.setFastScrollEnabled(true); 

     //////////////////////////////////////////////// 
     // add some items 
     itemList.add(new Item("Charlie")); 
     itemList.add(new Item("Jenny")); 

     //add new items and changes to adapter 
     itemListAdapter.notifyDataSetChanged(); 

     //////////////////////////////////////////////// 

     listView.setOnItemClickListener(new OnItemClickListener(){ 
      @Override 

      public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 

       String beforeName = itemListAdapter.getItem(position).getItemName().toString(); 

       String changedName = "Thomas"; 
       itemListAdapter.getItem(position).setItemName(changedName); 

      } 

     }); 
    } 
} 
+0

非常感謝你,真的很有幫助 – ssm

0

如果您想用不同的數組填充listview,請在適配器視圖中設置get方法,然後在適配器中使用set方法設置數組,然後調用adapter.notifyDataSetChanged()方法。您可以在onItemClickListenr()中找到適配器的參考,您可以使用它來調用和設置陣列。

+0

謝謝你的回覆 – ssm

相關問題