2016-01-04 76 views
0

我有自己的自定义列表视图,它具有一行TextView和EditText。现在我想在列表视图上方有一个图像,它根据列表视图中所选的EditText改变图像。例如,当用户点击第二行的EditText时,列表视图上方的顶部图像将变为img2。当用户在第一行的EditText上隐藏时,它将是img1等等。android-自定义列表视图,顶部有一个图像

我有问题,我不知道如何找出ListView中选择哪个EditText。

感谢

+0

您可以通过编辑字段的位置或字段上的文本或按钮的编号 – Joh

回答

1

你可以改变你的布局是这样的:

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

现在在Java代码中,你可以通过这个ImageView作为参数传递给你的Adapter构造。在getView方法中,您可以将点击侦听器设置为EditText,并基于此您可以更改ImageView中的图像。

+0

获取标识,但是如何获取位置在哪个编辑文本被点击。由于onClick被调用,但在该方法中,我不知道哪个编辑文本被点击。因为我有很多图像,但对于所有编辑文本而言它们都不相同。 –

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中。

+0

是的,这是一种可能的解决方案。但是我试过了,当我点击编辑框时,onItemClick就不会被调用,只有当我在列表视图中点击行时。 –

0

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

你可以做到这一点像这样

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

,并记住onItemclick中的位置变得

position=position-1 

否则,你会得到,因为列表视图的列的一个onItem期间错误点击被占领你的自定义标题