Reputation: 242
I have ListView
in which I am setting ImageView
,2 TextView
and 2 ImageButton
. ImageButtons
are for add and remove listItem.
Here is my code...
Helper.java
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
.
.
.
import com.example.customObject.ContactBean;
import com.example.helper.HelperAdaptor;
import com.example.helper.ImageHelper;
public class Helper extends Activity implements OnItemClickListener {
private List<ContactBean> list = new ArrayList<ContactBean>();
private ListView listView;
private Button add_helper;
public HelperAdaptor objAdapter ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_helper);
listView = (ListView) findViewById(R.id.lstview_helper_helperlist);
listView.setOnItemClickListener(this);
add_helper = (Button) findViewById(R.id.btn_helper_addhelper);
add_helper.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),
ContactListActivity.class);
startActivityForResult(intent, SELECT_CONTACT);
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_CONTACT) {
ContactBean objContact = new ContactBean();
objContact.setName(helperName);
objContact.setPhoneNo(helperNumber);
objContact.setPic(image);
list.add(objContact);
objAdapter = new HelperAdaptor(Helper.this,
R.layout.activity_helper_rows, list);
listView.setAdapter(objAdapter);
}
}
}
@Override
public void onItemClick(AdapterView<?> listview, View v, int position,
long id) {
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.helper, menu);
return true;
}
}
HelperAdapter.java
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
.
.
.
import com.example.customObject.ContactBean;
import com.example.helpmerestart.ContactListActivity;
import com.example.helpmerestart.R;
public class HelperAdaptor extends ArrayAdapter<ContactBean> {
private Activity activity;
private List<ContactBean> items;
private int row;
private ContactBean objBean;
private ViewHolder holder;
private int itemIndex;
private View view;
public HelperAdaptor(Activity act, int row, List<ContactBean> items) {
super(act, row, items);
this.activity = act;
this.row = row;
this.items = items;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
view = convertView;
itemIndex = position;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(row, null);
holder = new ViewHolder();
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
if ((items == null) || ((position + 1) > items.size()))
return view;
objBean = items.get(position);
holder.add = (ImageButton) view.findViewById(R.id.btn_helper_add);
holder.remove = (ImageButton) view.findViewById(R.id.btn_helper_remove);
if (holder.tvname != null && null != objBean.getName()
&& objBean.getName().trim().length() > 0) {
holder.tvname.setText(Html.fromHtml(objBean.getName()));
}
if (holder.tvPhoneNo != null && null != objBean.getPhoneNo()
&& objBean.getPhoneNo().trim().length() > 0) {
holder.tvPhoneNo.setText(Html.fromHtml(objBean.getPhoneNo()));
}
if (holder.profilepic != null && null != objBean.getPic()) {
holder.profilepic.setImageBitmap(objBean.getPic());
}
holder.add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
addHelper();
}
});
holder.remove.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
items.remove(itemIndex);
//trying to call notifyDataSetChanged() here
}
}
);
return view;
}
public void addHelper() {
Intent intent = new Intent(activity.getApplicationContext(),
ContactListActivity.class);
activity.startActivityForResult(intent, SELECT_CONTACT);
holder.add.setClickable(false);
holder.remove.setClickable(true);
}
public class ViewHolder {
public TextView tvname, tvPhoneNo;
public ImageView profilepic;
public ImageButton add, remove;
}
}
the problem is I am not able to remove the listItem for which remove button is clicked. you can refer Previous post to understand what exactly I want to have. I am trying to call notdifyDataSetChanged() in onClick() of remove button but not getting how to do that.
Any other method by which I can get my purpose working will be appritiated.
Regards..
Sourabh
Upvotes: 0
Views: 2550
Reputation: 10518
You using ArrayAdapter a wrong way. Do not keep your own items list (private List items), because ArrayAdapter has it's own items list inside. To add and remove items to listView use ArrayAdapter's add/addAll and remove methods. You should always use ArrayAdapters methods to manage items if you want it to work properly.
If you dont need ArrayAdapter's functionality, extend BaseAdapter.
P.S. Also you have a problem with itemIndex/holder variable. P.P.S. You use Holder wrong way. (findViewByIds executed every getView call)
There are tons of bugs in your code...
Upvotes: 1