我使用 CustomBaseAdapter 来表示 listView 中的列表。MainActivity 显示在下面的第一张图片中,其中包含自定义 listView 适配器。现在,当我单击位置编号 [4] 处的项目之一时,可绘制图像会随着填充颜色而改变,如图像第二个所示。当我再次滚动 listView 时,填充的 drawble 颜色消失并保持与之前的状态相同。那么我怎样才能做到这一点呢?
单行.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();
}
}
}
可绘制/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>