I use the CustomBaseAdapter to represent the list in the listView. The MainActivity is shown in the first image below in the link image which contains the custom listView adapter. And now when i click one of the items at the position number [4] the drawable images changes with filling the color as in the image second. And again when i scroll the listView the filling drawble color disappered and remains the same as in the previous state. So how can i make this happen??
Image Link to understand Clearly..
SingleRow.java
package androidhiveexample.jsonparsing.circularimageview;
import android.content.Context;
public class SingleRow {
private String title , number ;
private int image;
Context context;
public SingleRow(Context context){
this.context = context;
}
public SingleRow(int image , String title , String number){
this.title = title;
this.image = image;
this.number = number;
}
public int getImage() {
return image;
}
public void setImage(int image) {
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
CustomListAdapter.java
package androidhiveexample.jsonparsing.circularimageview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class CustomListAdapter extends BaseAdapter
{
ArrayList<SingleRow> rowArrayList;
Context context;
public CustomListAdapter(Context context , ArrayList<SingleRow> rowArrayList)
{
this.context = context;
this.rowArrayList = rowArrayList;
}
@Override
public int getCount() {
return rowArrayList.size();
}
@Override
public Object getItem(int i) {
return rowArrayList.get(i);
}
@Override
public long getItemId(int i) {
return rowArrayList.indexOf(getItem(i));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
if(convertView == null){
convertView = inflater.inflate(R.layout.single_row_view , null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.textView);
holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
holder.number = (TextView) convertView.findViewById(R.id.textViewNumber);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
SingleRow singleRow = (SingleRow) getItem(position);
holder.title.setText(singleRow.getTitle());
holder.imageView.setImageResource(singleRow.getImage());
holder.number.setText(singleRow.getNumber());
return convertView;
}
private class ViewHolder
{
TextView title , number;
ImageView imageView;
}
}
MainActivity.java
package androidhiveexample.jsonparsing.circularimageview;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends ActionBarActivity
{
ListView lv;
String number[] = {"1" , "2" , "3" ,"4" , "5" };
String title[] = {"Title_1_titlename" , "Title_1_titlename" , "Title_1_titlename" ,"Title_1_titlename" , "Title_1_titlename" };
int icons[] = {R.drawable.one , R.drawable.two , R.drawable.three , R.drawable.four , R.drawable.five};
ArrayList<SingleRow> singleRowArray = new ArrayList<>();
SingleRow singleRow;
static ImageView iv;
CustomListAdapter customListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView);
loopThroughRows();
lv.addHeaderView(getLayoutInflater().inflate(R.layout.header, null));
customListAdapter = new CustomListAdapter(this , singleRowArray);
lv.setAdapter(customListAdapter);
ImageView iv1 = (ImageView) findViewById(R.id.imageViewHeader);
iv1.setImageResource(R.drawable.new_img);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
position = position - 1;
switch (position) {
case 0:
iv = (ImageView) view.findViewById(R.id.imageView);
// iv.setImageResource(R.drawable.one_background);
Log.i("IMAGEVIEW_ID", iv.toString());
Fragment_1 fr = new Fragment_1();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fr);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
break;
case 1:
iv = (ImageView) view.findViewById(R.id.imageView);
iv.setImageResource(R.drawable.two_background);
break;
case 2:
iv = (ImageView) view.findViewById(R.id.imageView);
iv.setImageResource(R.drawable.three_background);
break;
case 3:
iv = (ImageView) view.findViewById(R.id.imageView);
iv.setImageResource(R.drawable.four_background);
break;
case 4:
iv = (ImageView) view.findViewById(R.id.imageView);
iv.setImageResource(R.drawable.five_background);
break;
}
}
});
}
public void loopThroughRows(){
for(int i = 0 ; i < title.length ; i++){
singleRow = new SingleRow(icons[i] , title[i] , number[i]);
singleRowArray.add(singleRow);
}
}
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
} else {
super.onBackPressed();
}
}
}
drawable/one.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:thickness="5dp"
android:useLevel="false"
>
<size
android:height="50dp"
android:width="50dp"/>
<solid android:color="#64DD17" />
</shape>
OMG finally solved after 8 days of HANGUP. Thank for #AMD for helping me to solve this issue..
SingleRow.java
private String title , number ;
private int defaultImage ;
private boolean isClicked;
Context context;
public SingleRow(Context context){
this.context = context;
}
public SingleRow(int defaultImage , String title , String number)
{
this.defaultImage = defaultImage;
this.title = title;
this.number = number;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public int getDefaultImage() {
return defaultImage;
}
public void setDefaultImage(int defaultImage) {
this.defaultImage = defaultImage;
}
public boolean isClicked() {
return isClicked;
}
public void setClicked(boolean isClicked) {
this.isClicked = isClicked;
}
CustomAdapter.java
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(TAG , "getView MethodofCustomListAdapter");
ViewHolder holder = null;
inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
if(convertView == null){
convertView = inflater.inflate(R.layout.single_row_view , null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.imageViewIcon);
holder.title = (TextView) convertView.findViewById(R.id.textViewTitle);
holder.number = (TextView) convertView.findViewById(R.id.textViewNumber);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(arrayList.get(position).getTitle());
holder.number.setText(arrayList.get(position).getNumber());
holder.icon.setImageResource(arrayList.get(position).getDefaultImage());
if(arrayList.get(0).isClicked()) {
if(position == 0) {
holder.icon.setImageResource(R.drawable.one_background);
}
Log.i("POSITION_CLICKED" , String.valueOf(position));
}
if(arrayList.get(1).isClicked()) {
if(position == 1) {
holder.icon.setImageResource(R.drawable.two_background);
}
Log.i("POSITION_CLICKED" , String.valueOf(position));
}
if(arrayList.get(2).isClicked()) {
if(position == 2) {
holder.icon.setImageResource(R.drawable.three_background);
}
Log.i("POSITION_CLICKED" , String.valueOf(position));
}
if(arrayList.get(3).isClicked()) {
if(position == 3) {
holder.icon.setImageResource(R.drawable.four_background);
}
Log.i("POSITION_CLICKED" , String.valueOf(position));
}
if(arrayList.get(4).isClicked()) {
if(position == 4) {
holder.icon.setImageResource(R.drawable.five_background);
}
Log.i("POSITION_CLICKED" , String.valueOf(position));
}
if(arrayList.get(5).isClicked()) {
if(position == 5) {
holder.icon.setImageResource(R.drawable.one_background);
}
Log.i("POSITION_CLICKED" , String.valueOf(position));
}
if(arrayList.get(6).isClicked()) {
if(position == 6) {
holder.icon.setImageResource(R.drawable.two_background);
}
Log.i("POSITION_CLICKED" , String.valueOf(position));
}
if(arrayList.get(7).isClicked()) {
if(position == 7) {
holder.icon.setImageResource(R.drawable.three_background);
}
Log.i("POSITION_CLICKED" , String.valueOf(position));
}
if(arrayList.get(8).isClicked()) {
if(position == 8) {
holder.icon.setImageResource(R.drawable.four_background);
}
Log.i("POSITION_CLICKED" , String.valueOf(position));
}
return convertView;
}
MainActivity.java
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Log.i(TAG , "onItemClickListener");
switch (position){
case 0:
arrayList.get(position).setClicked(true);
break;
case 1:
arrayList.get(position).setClicked(true);
break;
case 2:
arrayList.get(position).setClicked(true);
break;
case 3:
arrayList.get(position).setClicked(true);
break;
case 4:
arrayList.get(position).setClicked(true);
break;
case 5:
arrayList.get(position).setClicked(true);
break;
case 6:
arrayList.get(position).setClicked(true);
break;
case 7:
arrayList.get(position).setClicked(true);
break;
case 8:
arrayList.get(position).setClicked(true);
break;
}
}
});
customListAdapter.notifyDataSetChanged();