android - 自定义列表视图,顶部有一个图像

时间:2016-01-04 11:57:08

标签: android image listview android-edittext

我有自己的自定义列表视图,它在一行TextView中有EditText。现在我希望在此列表视图上方有一个图像,它根据列表视图中选定的EditText更改图像。因此,例如当用户单击第二行中的EditText时,列表视图上方的顶部图像将更改为img2。当用户在第一行的EditText上隐藏时,它将是img1,依此类推。

我遇到问题,我不知道怎样才能知道在ListView中选择了哪个EditText。

由于

3 个答案:

答案 0 :(得分:1)

您可以像这样更改布局:

<LinearLayout orientation="vertical">
   <ImageView/>
   <ListView/>
</LinearLayout>

现在,在您的Java代码中,您可以将此ImageView作为参数传递给Adapter构造函数。在getView方法中,您可以为EditText设置点击监听器,并根据您可以更改ImageView中的图像。

答案 1 :(得分:0)

您的布局应如下所示。

Demo.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/iv_demo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ListView
        android:id="@+id/list_demo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

Demo.java

public class Demo extends Activity {

    ArrayList<String> textViewList = new ArrayList<String>();
    ArrayList<String> imageList = new ArrayList<String>();
    ArrayList<String> editTextList = new ArrayList<String>();

    ListView list;
    ImageView ivDemo;

    ListDemoAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo);

        list = (ListView) findViewById(R.id.list_demo);
        ivDemo = (ImageView) findViewById(R.id.iv_demo);    

        adapter = new ListDemoAdapter(this, textViewList, editTextList, imageList);
        list.setAdapter(adapter);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Picasso.with(this).load(imageList.get(i)).into(ivDemo);
            }
        });
    }
}

在这里,您获得用户点击编辑文本的行的位置。使用此位置,您可以轻松地从Arraylist中的该位置加载图像,并将其显示在ListView上方的Imageview中。

答案 2 :(得分:0)

您可以多次调用addHeaderView()来添加任意数量的标头。在将适配器设置为列表视图之前,您必须执行此操作。

你可以这样做

<form method="POST" action="confirmReservation.php" onSubmit="return validation()" name ="frm">
    <div class="col-md-2 form-group">
        <br><input type="text" id = "Fname" name="Fname" class="form-control"  placeholder="First Name" required>
    </div>
</form>

并记住在onItemclick期间,位置变为

LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup)inflater.inflate(R.layout.your_mage_layout, yourlistview, false);
yourlistview.addHeaderView(header, null, false);

否则你会在onItem点击期间收到错误,因为listview的一行被你的自定义标题占用