呵呵,最近做一个评价的列表,遇到了再ListView中的item有edittext时,edittext的焦点老是错乱,百度了半天都木有解决的方法,要是数据量比较少可以使用ScrollView+LinearLayout动态添加,但是数据量比较多这样做极不合理了,呵呵,既然Listview不行,用GridView是否可以做到相同的效果呢?答案是可以的,看代码
package com.example.gridviewtest;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
public class MainActivity extends Activity {
private GridView grid;
private Adapter adapter;
private List<goods> list=new ArrayList<goods>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for(int i=0;i<30;i++){
goods model=new goods();
model.setName("");
list.add(model);
}
this.grid=(GridView) findViewById(R.id.gridView1);
this.adapter=new Adapter();
this.grid.setAdapter(adapter);
Button ok=(Button) findViewById(R.id.button1);
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for(int i=0;i<list.size();i++){
String str=list.get(i).getName();
if(!str.equalsIgnoreCase("")){
System.out.println("------输入的值-------"+str);
}
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public class Adapter extends BaseAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// ViewHolder holder=null;
// if(null == convertView){
// holder=new ViewHolder();
convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null);
EditText editText1=(EditText) convertView.findViewById(R.id.editText1);
// convertView.setTag(holder);
// }else{
// holder=(ViewHolder) convertView.getTag();
// }
goods model=list.get(position);
String str=model.getName();
if(str.equalsIgnoreCase("")){
editText1.setHint("请输入");
}else{
editText1.setText(str);
}
editText1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
list.get(position).setName(s.toString());
}
});
return convertView;
}
}
public static class ViewHolder{
private EditText editText1;
}
}
<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"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<GridView
android:id="@+id/gridView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:numColumns="1"
android:layout_above="@+id/button1">
</GridView>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="确定"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
<?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:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
</EditText>
</LinearLayout>
</LinearLayout>
package com.example.gridviewtest;
public class goods {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}