عرض القائمة مع عرض النص المحدد
-
15-11-2019 - |
سؤال
لدي سؤالان:
إذا كنت أستخدم
CheckedTextView
فيListView
وصفي يمتد فقطActivity
(بدلاً منListActivity
)، نظرًا لوجود زر آخر في الأسفل أسفل زريListView
، ما هو الحدث الذي يجب أن أستمع إليه ، عند تحديد خانة اختيار فيCheckedTextView
?إذا قمت بتوسيع صفي للاستخدام
ListActivity
, ، استطيع ان استخدمonListItemClick
الحدث، أليس كذلك؟كيف يمكنني إضافة زر جديد إلى هذا النوع من التخطيط؟
هنا هو الكود الخاص بي ..
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m_versionText=(TextView)findViewById(R.id.versionText);
m_versionText.setText("Android Version is:" + Build.VERSION.RELEASE);
m_btnAllCalendars = (Button)findViewById(R.id.btn_allCalendars);
m_btnAllCalendars.setOnClickListener(mCalendarListener);
m_calendarList=(ListView)findViewById(R.id.calList);
//populateList uses simplecursoradapter to add items to the listview..(this part is working)
populateList();
m_calCheckText = (CheckedTextView)findViewById(R.id.calTextView);
m_calCheckText.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
if (((CheckedTextView)v).isChecked())
{
Log.d(TAG,"i am inside ...its checked");
}
}
});
private void populateList(){
Log.d(TAG,"inside populateList");
Cursor cursor = getAllCalendars();
startManagingCursor(cursor);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.cal_list,cursor,new String[]{"displayName"},new int []{R.id.calTextView});
//m_calendarList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
m_calendarList.setAdapter(adapter);
}
}
تحديث:::
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.cal_list,cursor,new String[]{"displayName"},new int []{R.id.calTextView});
m_calendarList=getListView();
m_calendarList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
m_calendarList.setAdapter(adapter);
m_calendarList.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view,int position,long id)
{
Log.d(TAG,"I am inside onItemClick and position is:"+String.valueOf(position));
CheckedTextView ctv = (CheckedTextView)view;
the below code didnt work too
//CheckedTextView ctv = (CheckedTextView)view.findViewById(R.layout.cal_list);
ctv.setChecked(!ctv.isChecked());
}
});
المحلول
يمكنك تجربة هذا:
m_calendarList.setAdapter(adapter);
m_calendarList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// do something here...
// m_calendarList.getCheckedItemPosition(); will also give you the position
}
});
يحرر:
m_calendarList.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view,int position,long id) {
View v = m_calendarList.getChildAt(position);
CheckedTextView ctv = (CheckedTextView) v.findViewById(R.id.cal_id);
}
});
نصائح أخرى
يمكنك استخدام CheckedTextView.setOnClickListener() داخل طريقة onClick() الخاصة بمستمعك، يمكنك استخدام CheckedTextView.isChecked() لمعرفة ما إذا كان قد تم تحديده أم لم يتم تحديده.
يحرر:فيما يلي مثال على طريقة getView() للمحول الخاص بك.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
m_calCheckText = (CheckedTextView)v.findViewById(R.id.calTextView);
m_calCheckText.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
if (((CheckedTextView)v).isChecked())
{
Log.d(TAG,"i am inside ...its checked");
}
}
});
return v;
}
لا تنتمي إلى StackOverflow