首页 > 代码库 > listView长按事件内修改ListView对象内容

listView长按事件内修改ListView对象内容

============问题描述============


我在ListView的Item长按事件内打开一个弹出窗口,窗口内有一个EditText对象,在这个编辑框内输入文本点确定后,希望可以直接修改掉ListView对象内某个TextView对象的内容;现在ListView长按事件内直接修改没有问题了,只是弹出一个窗口再修改不知道该如何实现;

============解决方案1============


引用 楼主 hackerlyf 的回复:
我在ListView的Item长按事件内打开一个弹出窗口,窗口内有一个EditText对象,在这个编辑框内输入文本点确定后,希望可以直接修改掉ListView对象内某个TextView对象的内容;现在ListView长按事件内直接修改没有问题了,只是弹出一个窗口再修改不知道该如何实现;

用startActivityForResult()跳转获取值就行了啊

============解决方案2============


不太明白楼主的意思,你要是第一次会修改了,那就修改数据源后,adapter.notifyDataSetChanged() 每次都是这样

============解决方案3============


源代码帮你写好了 你自己看看
package app.example.test0926;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
private ListView lvShow;
private AlertDialog dialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvShow = (ListView) findViewById(R.id.lvShow);
String[] arr = { "李四", "小猪", "店小二" };
ArrayAdapter<String> Adap1 = new ArrayAdapter<String>(this,
R.layout.test_list, arr);
lvShow.setAdapter(Adap1);// 设置ListView的显示
lvShow.setOnItemLongClickListener(new OnItemLongClickListener() {

@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
setAlertDialog(view);
dialog.show();
return false;
}
});
}

private void setAlertDialog(final View view) {
LayoutInflater factory = LayoutInflater.from(getApplicationContext());
// 引入一个外部布局
View contview = factory.inflate(R.layout.test_dialog, null);
contview.setBackgroundColor(Color.BLACK);// 设置该外部布局的背景
final EditText edit = (EditText) contview
.findViewById(R.id.edit_dialog);// 找到该外部布局对应的EditText控件
Button btOK = (Button) contview.findViewById(R.id.btOK_dialog);
btOK.setOnClickListener(new OnClickListener() {// 设置按钮的点击事件

@Override
public void onClick(View v) {
((TextView) view).setText(edit.getText().toString());
dialog.dismiss();
}
});
dialog = new AlertDialog.Builder(MainActivity.this).setView(contview)
.create();
}
}

============解决方案4============


以下是对应的三个布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/lvShow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

============解决方案5============


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edit_dialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="28sp" />

    <Button
        android:id="@+id/btOK_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="确定" />

</LinearLayout>

listView长按事件内修改ListView对象内容