베이스 어댑터를 사용하여 목록 뷰를 부 풀리고 있습니다 Listview 내부에는 두 개의 위젯 Textview 및 Edittext가 있습니다.UI 요소 중 하나가 터치되었을 때 Listview 행 강조 표시
Listview가 적절하게 팽창했으며 또한 표시됩니다. 우리의 요구 사항은 행이 색 또는 강조 표시되어야하는 행 중 하나를 클릭했을 때입니다. 사용자가 강조 표시된 다른 행을 클릭했을 때 이전 행 색상이 정상이됩니다.
베이스 어댑터를 사용하여 목록 뷰를 부 풀리고 있습니다 Listview 내부에는 두 개의 위젯 Textview 및 Edittext가 있습니다.UI 요소 중 하나가 터치되었을 때 Listview 행 강조 표시
Listview가 적절하게 팽창했으며 또한 표시됩니다. 우리의 요구 사항은 행이 색 또는 강조 표시되어야하는 행 중 하나를 클릭했을 때입니다. 사용자가 강조 표시된 다른 행을 클릭했을 때 이전 행 색상이 정상이됩니다.
그 터치 된 뷰에서이 요청 초점을 수행하는 가장 좋은 방법은, 어댑터이 재정 방식의 getView을 할 :
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
<prepare or create view here>
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
convertView.requestFocus();
}
});
return convertView;
}
를 다른 상태에 대해 서로 다른 색상을 제공하기 위해 당신이 selector 배경을 사용할 수 있습니다 의지.
음, 간단합니다. 여기 내가 어떻게하는지.
먼저 ListView Item의 하이라이트 및 정상 상태를 표시하기 위해 두 개의 이미지가 필요합니다. 그런 다음 ListView에 사용자 정의 행을 사용해야합니다. TextView가 들어 있다고 가정 해 봅시다.
활동에 정수 변수를 유지하십시오. 이 정수는 ListView의 선택된 인덱스를 유지합니다. 처음에는 -1 값을 지정하십시오.
이제 사용자 정의 어댑터를 사용할 때 getView()에서 int 변수 == postition인지 여부를 확인할 수 있습니다. 동일하면 TextView의 배경을 강조 표시로 설정하고, 그렇지 않으면 일반으로 설정하십시오. 그리고 OnListItemClick()을 재정의하십시오. 이 경우 해당 int 변수의 위치를 저장하고 notifyDataSetChanged()를 호출하십시오. 다음은 이에 대한 샘플 코드입니다.
public class MySampleActivity extends ListActivity
{
ArrayList<String> lst_string = new ArrayList<String>();
int selected_item = -1;
MyListAdapter adptr;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lst_string.add("item 1");
lst_string.add("item 2");
lst_string.add("item 3");
lst_string.add("item 4");
lst_string.add("item 5");
lst_string.add("item 6");
lst_string.add("item 7");
lst_string.add("item 8");
lst_string.add("item 9");
adptr = new MyListAdapter();
setListAdapter(adptr);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
selected_item = position;
adptr.notifyDataSetChanged();
}
private class MyListAdapter extends BaseAdapter
{
@Override
public int getCount()
{
return lst_string.size();
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
private LayoutInflater mInflater;
public MyListAdapter()
{
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.tv_row);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(lst_string.get(position));
if(selected_item == position)
{
holder.textView.setBackgroundDrawable(getResources().getDrawable(R.drawable.list_selected));
}
else
{
holder.textView.setBackgroundDrawable(getResources().getDrawable(R.drawable.list_normal));
}
return convertView;
}
}
public static class ViewHolder
{
public TextView textView;
}
}
감사합니다. Khawar, 그런 wonderfull 설명. Activity를 확장하여 @Override protected void onListItemClick 메서드와 목록 뷰의 On click 수신기를 설정하는 이유가 무엇인지 설명합니다. –
감사합니다. Jim It 's Work for me. 나는 4 개의 전망이있다 Listview 3 안은 Textview이고 1은 Edittext이다. Listener가 Textview에 설정되고 색상이 변경됩니다. 그러나 Edittext를 클릭하면 색상이 변경되지 않습니다. 편집 텍스트의 수신기가 설정되어 있지 않습니다. –
이것은'EditText'가 터치 이벤트를 잡아 자신의 행동 (예 : 키보드 쇼 등)을하기 때문에 발생합니다. EditText에서 텍스트를 입력하지 못하게하려면'setClickable (false)'를 수행하십시오. 텍스트 입력의 가능성을 남기고 싶다면'EditText.setOnFocusChanged()'를 놓고 그곳에서 선택된 것과 같이 구멍 목록 항목을 표시하십시오. – Jin35
감사합니다. 짐, 목록보기의 편집 텍스트에서 클릭 리스너를 설정하기 위해해야 할 일을 설명해 주시겠습니까? 그래서 내 문제가 해결됩니다. 나는 그들 중 하나를 클릭 할 때 3 개의 텍스트보기를 가지고있는 것을 이해하지 못한다. 청취자가 설정되어 있지만 편집 텍스트를 클릭 할 때 아무 일도 일어나지 않을 것이다. –