首先非常感謝原文章作者。
今天項目用到Listview點擊item變色。網上找了好久,都沒有找到簡單的方法,好像只能重寫getview();
網上找到了一個比較簡單的例子,但是不懂為什么,先記錄下來以后慢慢學習。
<span style="font-size:24px;">package leoli.com.focuslistview;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView mListView;
private List<String> list=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView= (ListView) this.findViewById(R.id.listview);
for (int i=0;i<10;i++){
list.add("你好"+i);
}
final MyAdapter adapter=new MyAdapter();
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
adapter.setCurrentItem(i);
adapter.setClick(true);
adapter.notifyDataSetChanged();
}
});
}
class MyAdapter extends BaseAdapter{
private int mCurrentItem=0;
private boolean isClick=false;
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view==null){
view= LayoutInflater.from(MainActivity.this).inflate(R.layout.listview_item,null);
}
TextView textView= (TextView) view.findViewById(R.id.test);
LinearLayout parent= (LinearLayout) view.findViewById(R.id.ll_parent);
textView.setText(list.get(i));
if (mCurrentItem==i&&isClick){
parent.setBackgroundColor(Color.parseColor("#3F51B5"));
textView.setTextColor(Color.parseColor("#ff6600"));
}else{
parent.setBackgroundColor(Color.parseColor("#ffffff"));
textView.setTextColor(Color.parseColor("#000000"));
}
return view;
}
public void setCurrentItem(int currentItem){
this.mCurrentItem=currentItem;
}
public void setClick(boolean click){
this.isClick=click;
}
}
}
下面是原文章的講解:
我們都知道,Listview每生成一個item都會執行一次getview().所以我們在Adapter中加入了兩個字段,這兩個字段是用來判斷當前的item的position和該item有無被點擊的.mCurrentItem的初始值為0,所以在不斷執行getview()時就進行了各個item項的position與mCurrentItem進行對比.最后通過if語句來執行對比后的設置.在我們的Activity中,我們調用了Adapter中的兩個對外開放的方法分別是設置點擊事件和設置當前的item項的position.最后再調用Adapter的notifyDatasetChanged().刷新Listview.
原文章鏈接:http://blog.csdn.net/qq_14813933/article/details/50417859
