基本的には、各リスト項目にはリストビューがあります(2つのテキストビューとチェックボックス)。特定のリスト項目をクリックすると、その行を新しい編集テキストビューといくつかのボタンに置き換えたいと思っていました。 これを実装するにはどうすればよいですか? 整数変数を使用して、選択したアイテムの現在の位置を格納し、別のビューをロードするか、またはアクションモーションイベントを使用して現在選択されているアイテムを取得する必要がありますか?アンドロイドリストビューでインプレイス編集を行う方法は?
答えて
あなたのrow.xmlファイルに2つのテキストビューとチェックボックスがあり、(EditText +いくつかのボタン)がありますが、EditTextとButtonsのデフォルトはandroid:visibility="gone"
になります。次にonItemClickListener()を適切なビューでview.setVisibility()を呼び出して可視/不可視にするListView。これは、新しい項目がリストのその行の古い項目を置き換えているかのように、ユーザーに表示されます。
EditViewは実際にTextViewからサブクラス化されているので、実際にはどこでもEditTextを使用して、必要に応じてedditable = true \ falseを設定することができます。
ちょっと別の解決策かもしれませんが、ティムの答えも適切です。
あなたonItemClick()
は次のようになります。一つだけのアイテムが同時にビューを変更することができる場合
class MyAdapter extends ArrayAdapter<MyItem> {
private LayoutInflater mInflater;
private static final int VIEW_ITEM_NORMAL = 0;
private static final int VIEW_ITEM_SELECTED = 1;
...
@Override
public int getItemViewType(int position) {
return getItem(position).isSelected() ? VIEW_ITEM_SELECTED : VIEW_ITEM_NORMAL;
// implement isSelected()
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
int layoutId;
int viewType = getItemViewType(position);
if (v == null) {
switch (viewType) {
case VIEW_ITEM_NORMAL:
layoutId = R.layout.list_item;
break;
case VIEW_ITEM_SELECTED:
layoutId = R.layout.list_item_selected;
break;
default:
layoutId = R.layout.list_item;
break;
}
v = mInflater.inflate(layoutId, parent, false);
} else {
v = convertView;
}
...
、:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MyAdapter myAdapter = (MyAdapter) parent.getAdapter();
MyItem myItem = (MyItem) myAdapter.getItem(position);
myItem.setSelected(true); // set selected flag
// notify the data has been changed and the view should refresh itself
myAdapter.notifyDataSetChanged();
// you can obtain the item view type by calling
// myAdapter.getItemViewType(position);
...
}
を今すぐあなたのアダプタでgetViewTypeCount()
、getItemViewType()
とgetView()
メソッドをオーバーライドアダプタに選択したフラグを保存する方が良いでしょう:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MyAdapter myAdapter = (MyAdapter) parent.getAdapter();
myAdapter.setSelected(position);
myAdapter.notifyDataSetChanged();
...
}
class MyAdapter extends ArrayAdapter<MyItem> {
private int mSelected = -1;
...
public void setSelected(int position) {
mSelected = position;
}
@Override
public int getItemViewType(int position) {
return (mSelected == position) ? VIEW_ITEM_SELECTED : VIEW_ITEM_NORMAL;
}
...
ViewHolderパターンを適用することを忘れないでください。 here。
ありがとう@biegleux。アダプタの選択項目を設定するあなたの解決策は:) :) :) – mayuri
- 1. Asp.net ajaxを使用したインプレイス編集
- 2. VB.netでテキスト編集を行う方法
- 3. JqGridサブグリッドでインライン編集を行う方法は?
- 4. 複数行の編集方法は?
- 5. extjsでの行編集方法6
- 6. Perlのダイヤモンドとインプレイス編集演算子を使用してディレクトリ内の複数のファイルをインプレース編集
- 7. 端末で編集テキストを編集する方法は?
- 8. C#で編集モードでXMLファイルを編集する方法
- 9. オブジェクトモードで編集モードで情報を編集する方法
- 10. Javaparser方法編集
- 11. 複数の行をキーボードだけで編集する方法は?
- 12. 他の行を編集せずにテキストファイルを編集する方法(cmd)
- 13. 編集可能なテーブルに行う方法を
- 14. スパンを編集できないようにする方法は?
- 15. グリッドビューで編集モードで行を開く方法
- 16. jqGrid行編集カスタム編集アクションツールチップ
- 17. テーブルビューの編集時に行を表示する方法は?
- 18. NSTableViewの行の編集内容を保存する方法は?
- 19. JQGrid行編集
- 20. グリッド編集行の編集でValueFieldを表示しないようにする
- 21. データベースでLaravelの移行テーブルを編集する方法
- 22. SharePoint編集モードでのみjavascriptファイルを実行する方法
- 23. androidで複数行の編集テキストを作成する方法
- 24. コンボでリストビューの行を編集する方法
- 25. Webgrid Razor MVC3で行を編集する方法
- 26. タブバーベースのアプリケーションでテーブル行を編集する方法
- 27. hasMany(複数行)でフォームを編集する方法
- 28. C#でデータグリッド行のバックカラーを編集する方法
- 29. テーブルをVaadinで編集する方法
- 30. フレキグリッドでデータを編集する方法
あなたの答えをありがとう。はい、私は可視性で遊ぶことができますが、まだどのリストの項目が現在選択されているかの位置を保存しなければならないので、どの位置で可視性を変更する必要があるかを知る必要があります。 – mayuri