<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="noisuy.com.duy.edittextlistview.MainActivity">
<ListView
android:id="@+id/lvPeople"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</RelativeLayout>
item_listview.xml
<?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="horizontal">
<TextView
android:id="@+id/tvPosition"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/edName"
android:layout_width="100dp"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/cbShowName"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
ObjectPeople.java
package noisuy.com.duy.edittextlistview;
/**
* Created by Latitude on 02/10/2016.
*/
public class ObjectPeople {
boolean ShowName;
String name;
public ObjectPeople() {
}
public boolean isShowName() {
return ShowName;
}
public void setShowName(boolean showName) {
ShowName = showName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
AdapterListView.java
package noisuy.com.duy.edittextlistview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by Latitude on 02/10/2016.
*/
public class AdapterListView extends ArrayAdapter<ObjectPeople> {
Context mContext;
LayoutInflater inflater;
ArrayList<ObjectPeople> arrayPeople;
public AdapterListView(Context context, int resource, ArrayList<ObjectPeople> arraypeople) {
super(context, resource);
this.mContext = context;
this.arrayPeople = arraypeople;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_listview, null);
holder = new ViewHolder();
holder.tvPosition = (TextView) convertView.findViewById(R.id.tvPosition);
holder.edName = (EditText) convertView.findViewById(R.id.edName);
holder.cbShowName = (CheckBox) convertView.findViewById(R.id.cbShowName);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ObjectPeople person = arrayPeople.get(position);
holder.tvPosition.setText("Item " + position);
holder.cbShowName.setChecked(person.isShowName());
if (person.isShowName()) {
holder.edName.setVisibility(View.VISIBLE);
} else {
holder.edName.setVisibility(View.INVISIBLE);
}
//Using setOnclickListener not setOnCheckedChangeListener
holder.cbShowName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.cbShowName.isChecked()) {
arrayPeople.get(position).setShowName(true);
holder.edName.setVisibility(View.VISIBLE);
} else {
arrayPeople.get(position).setShowName(false);
holder.edName.setVisibility(View.INVISIBLE);
arrayPeople.get(position).setName("");
}
}
});
//Fill EditText with the value you have in data source
holder.edName.setText(person.getName());
holder.edName.setId(position);
//we need to update adapter once we finish with editing
holder.edName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
final int position = v.getId();
final EditText Caption = (EditText) v;
arrayPeople.get(position).setName(Caption.getText().toString());
}
}
});
return convertView;
}
@Override
public int getCount() {
return arrayPeople.size();
}
static class ViewHolder {
TextView tvPosition;
EditText edName;
CheckBox cbShowName;
}
}
MainActivity.java
package noisuy.com.duy.edittextlistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ListView lvPeople;
AdapterListView adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvPeople= (ListView) findViewById(R.id.lvPeople);
ObjectPeople person;
ArrayList<ObjectPeople> arrPeople=new ArrayList<>();
for (int i=0;i<50;i++){
person=new ObjectPeople();
person.setName("Name "+i);
person.setShowName(false);
arrPeople.add(person);
}
adapter=new AdapterListView(this,R.layout.item_listview,arrPeople);
lvPeople.setAdapter(adapter);
}
}
what about last item in list?.. the focus will not change so its value will not taken
ReplyDeletewhile button onclick set clear focus to the edittext
Delete