我有一个只有TextView的ListView。我想要一个实现,如果我点击ListView行,应该出现带有替换按钮的edittext,无论我在该edittext中输入什么,然后点击替换,listrow应该更新。我面临的主要问题是在List行上放置一个布局。任何人都可以告诉我如何实现这个目标吗?
public class ContextMenuActivity extends Activity {
private ListView list;
TextView tv;
ArrayList<String> alistItems;
int loopCount;
CustomAdapter adapter;
LayoutInflater inflater;
TextView textView;
EditText edtTextToReplace;
RelativeLayout rl_inflate;
View child;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contextmenulist);
initComponents();
setActionListener();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Options");
menu.add(0, v.getId(), 0, "Edit");
menu.add(0, v.getId(), 0, "Delete");
/*
* MenuInflater inflater = getMenuInflater();
* inflater.inflate(R.menu.context_menu, menu);
*/
}
private void initComponents() {
inflater = ContextMenuActivity.this.getLayoutInflater();
list = (ListView) findViewById(R.id.contextmenu_lst_list);
tv = (TextView) findViewById(R.id.listitem_txt_item);
alistItems = new ArrayList<String>();
for (loopCount = 1; loopCount < 30; loopCount++) {
alistItems.add("Item " + loopCount);
}
prepareView();
}
private void prepareView() {
adapter = new CustomAdapter(getApplicationContext(), R.layout.listitem,
alistItems);
list.setAdapter(adapter);
registerForContextMenu(list);
}
private void setActionListener() {
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, final View view,
final int arg2, long arg3) {
System.out.println("alist is " + alistItems);
textView = (TextView) view.findViewById(R.id.listitem_txt_item);
rl_inflate = (RelativeLayout) view
.findViewById(R.id.rl_inflate);
child = getLayoutInflater().inflate(R.layout.clicklistitem,
null);
rl_inflate.addView(child);
textView.setVisibility(View.GONE);
rl_inflate.setVisibility(View.VISIBLE);
Button my_btn = (Button) child
.findViewById(R.id.clicklistitem_btn_replace);
edtTextToReplace = (EditText) child
.findViewById(R.id.clicklistitem_edt);
my_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
textView.setText(edtTextToReplace.getText().toString());
alistItems.set(arg2, edtTextToReplace.getText()
.toString());
rl_inflate.setVisibility(View.GONE);
rl_inflate.removeViewInLayout(child);
textView.setVisibility(View.VISIBLE);
adapter.notifyDataSetChanged();
}
});
}
});
}
public class CustomAdapter extends ArrayAdapter<String> {
ArrayList<String> alistItems;
int resource;
public CustomAdapter(Context context, int resource,
ArrayList<String> alistItems) {
super(context, resource);
this.alistItems = alistItems;
this.resource = resource;
}
@Override
public int getCount() {
return alistItems.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder = new Holder();
if (convertView == null) {
convertView = inflater
.inflate(R.layout.listitem, parent, false);
}
holder.tvRow = (TextView) convertView
.findViewById(R.id.listitem_txt_item);
convertView.setTag(holder);
holder = (Holder) convertView.getTag();
holder.tvRow.setText(alistItems.get(position));
return convertView;
}
}
class Holder {
TextView tvRow;
}
}
答案 0 :(得分:9)
您可以通过两种方式实现这一目标: -
首先在listview的项目布局中添加EditText和一个Button并隐藏它们。现在设置listview的onItemClickListener,其中隐藏textview并显示editext和replace按钮。
其次是使用编辑文本和按钮创建一个新布局,并为listview设置onItemClickListener,当点击行时,您可以轻松地将该布局扩展到列表视图的项目布局中。
第二个解决方案代码: -
inflate.xml
<EditText
android:id="@+id/enter_txt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/btn_replace"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
* list_view_item.xml *
<TextView
android:id="@+id/my_txt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ABCD"
/>
<RelativeLayout
android:id="@+id/rl_inflate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
listview onItemClickListener
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TextView txt_view = (TextView)view.findViewById(R.id.my_txt);
txt_view.setVisibility(View.GONE);
RelativeLayout rl_inflate = (RelativeLayout)view.findViewById(R.id.rl_inflate);
View child = getLayoutInflater().inflate(R.layout.inflate);
rl_inflate.addView(child);
Button my_btn = (Button)child.findViewById(R.id.btn_replace);
EditText enter_txt = (EditText)child.findViewById(R.id.enter_txt);
my_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
txt_view.setText(enter_txt.getText().toString());
txt_view.setVisibility(View.VISIBLE);
}
});
}
});
答案 1 :(得分:0)
您可以使用以下两种解决方案之一:
包含edittext和替换按钮以及textview布局,并且应该处于隐藏状态。单击列表项时,将编辑文本和按钮的可见性更改为可见,并将textview的可见性更改为Gone。单击替换按钮时,反转可见性更改。
单击列表项时,显示带有edittext和替换按钮的警告框。更改内容并单击替换按钮后,将textview内容更改为更改的值。