自定义ListView在Android中不工作的项目单击事件
我们正在处理一个项目,其中有一个自定义listview和一个baseadapter。我们正在尝试获取listview的item click事件。我在活动中的item click listener中粘贴了一个toast,但它没有显示。下面是我完成的代码自定义ListView在Android中不工作的项目单击事件,android,listview,android-listview,Android,Listview,Android Listview,我们正在处理一个项目,其中有一个自定义listview和一个baseadapter。我们正在尝试获取listview的item click事件。我在活动中的item click listener中粘贴了一个toast,但它没有显示。下面是我完成的代码 question_list is the ListView Object. question_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
question_list is the ListView Object.
question_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TextView example = (TextView) view.findViewById(R.id.single_question_name);
// String a=example.getText().toString();
Toast.makeText(MainActivity.this,"jo", Toast.LENGTH_LONG).show();
}
});
问题列表是ListView对象。
问题列表.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//TextView示例=(TextView)view.findViewById(R.id.single\u question\u name);
//字符串a=example.getText().toString();
Toast.makeText(MainActivity.this,“jo”,Toast.LENGTH_LONG.show();
}
});
listview的数据是动态添加的。我们在baseadapter中使用了两种动态布局进行膨胀。baseadapter中的代码如下:
public class QuestionAdapter extends BaseAdapter {
ArrayList<QuestionsDataModel> question_list_array;
List<OptionsDataModel> option_list;
Context context;
LayoutInflater inflater;
SingleHolder sh;
int k=0,l=0;
View v_single=null,v_multiple=null,v_final=null;
MultipleHolder mh;
int number_of_options;
int position_counter=0;
public static final int TYPE_HEADER=0;
public static final int TYPE_ROW=1;
public QuestionAdapter(ArrayList<QuestionsDataModel> question_list_array, Context context) {
this.question_list_array=question_list_array;
this.context=context;
inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return question_list_array.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position)
{
return 0;
}
@Override
public int getViewTypeCount()
{
return 2;
}
@Override
public int getItemViewType(int position) {
return (question_list_array.get(position).getQuestion_type().equals("single"))?TYPE_HEADER :TYPE_ROW;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String question_type = question_list_array.get(position).getQuestion_type();
option_list = question_list_array.get(position).option_list;
number_of_options = option_list.size();
if (question_type.equals("single"))
{
v_single=convertView;
if (v_single == null)
{
v_single = inflater.inflate(R.layout.single_choice_layout, null);
sh = new SingleHolder();
sh.single_question_name = (TextView) v_single.findViewById(R.id.single_question_name);
sh.single_radiogroup = (RadioGroup) v_single.findViewById(R.id.single_radiogroup);
v_single.setTag(sh);
}
else
{
sh = (SingleHolder) v_single.getTag();
}
sh.single_radiogroup.clearCheck();
sh.single_radiogroup.removeAllViews();
sh.single_question_name.setText(question_list_array.get(position).getQuestion_name());
for (int j = 0; j < number_of_options; j++)
{
RadioButton rb = new RadioButton(context);
rb.setText(option_list.get(j).getOption_name());
sh.single_radiogroup.addView(rb);
}
v_final=v_single;
}
else if(question_type.equals("multiple"))
{
v_multiple = convertView;
if (v_multiple == null) {
v_multiple = inflater.inflate(R.layout.multiple_choice_layout, null);
mh = new MultipleHolder();
mh.multiple_question_name = (TextView) v_multiple.findViewById(R.id.multiple_question_name);
mh.ll_multiple = (LinearLayout) v_multiple.findViewById(R.id.ll_multiple);
mh.ll_choice_child= (LinearLayout) v_multiple.findViewById(R.id.ll_choice_child);
v_multiple.setTag(mh);
} else {
mh = (MultipleHolder) v_multiple.getTag();
}
mh.multiple_question_name.setText(question_list_array.get(position).getQuestion_name());
mh.ll_choice_child.removeAllViews();
for (int m = 0; m < number_of_options; m++)
{
CheckBox c = new CheckBox(context);
c.setText(option_list.get(m).getOption_name());
mh.ll_choice_child.addView(c);
}
//return v;
v_final=v_multiple;
}
return v_final;
}
private class SingleHolder
{
TextView single_question_name;
RadioGroup single_radiogroup;
}
private class MultipleHolder
{
TextView multiple_question_name;
LinearLayout ll_multiple;
LinearLayout ll_choice_child;
}
}
公共类QuestionAdapter扩展了BaseAdapter{
数组列表问题列表数组;
列表选项\u列表;
语境;
充气机;
单持有人sh;
int k=0,l=0;
视图v_single=null,v_multiple=null,v_final=null;
多弹头mh;
整数-选项的个数;
int位置_计数器=0;
公共静态final int TYPE_头=0;
公共静态最终整型_行=1;
公共问题适配器(数组列表问题列表数组,上下文){
这个.question\u list\u数组=question\u list\u数组;
this.context=context;
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
@凌驾
public int getCount(){
返回问题列表数组.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置)
{
返回0;
}
@凌驾
public int getViewTypeCount()
{
返回2;
}
@凌驾
public int getItemViewType(int位置){
返回(问题列表数组.get(position).getQuestion类型().equals(“single”))?类型标题:类型行;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
字符串question_type=question_list_array.get(position.getQuestion_type();
选项列表=问题列表数组。获取(位置)。选项列表;
选项的数量=选项列表。大小();
如果(问题类型等于(“单一”))
{
v_single=转换视图;
if(v_single==null)
{
v_single=充气机。充气(R.layout.single_choice_layout,null);
sh=新的单支架();
sh.single\u question\u name=(TextView)v\u single.findviewbyd(R.id.single\u question\u name);
sh.single\u radiogroup=(radiogroup)v\u single.findViewById(R.id.single\u radiogroup);
v_单个设置标签(sh);
}
其他的
{
sh=(SingleHolder)v_single.getTag();
}
sh.single_radiogroup.clearCheck();
sh.single_radiogroup.removeallview();
sh.single_question_name.setText(question_list_array.get(position.getQuestion_name());
对于(int j=0;j
编辑:
我已添加了单项xml文件:
single_choice_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/single_question_name"
/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/single_radiogroup"
android:orientation="vertical"></RadioGroup>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:id="@+id/ll_multiple"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/multiple_question_name"
android:text="second question"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ll_choice_child"
android:orientation="vertical"></LinearLayout>
</LinearLayout>
multiple_choice_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/single_question_name"
/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/single_radiogroup"
android:orientation="vertical"></RadioGroup>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:id="@+id/ll_multiple"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/multiple_question_name"
android:text="second question"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ll_choice_child"
android:orientation="vertical"></LinearLayout>
</LinearLayout>
尝试在onCreate()方法中定义ClickListener。尝试在onCreate()方法中定义ClickListener。您必须返回BaseAdapter的getItem
方法中的列表视图的项的位置
@Override
public QuestionsDataModel getItem(int position) {
return question_list_array.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
您必须返回baseAdapter的getItem
方法中Listview
项的位置
@Override
public QuestionsDataModel getItem(int position) {
return question_list_array.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
发布列表项xml,可能是焦点问题。问题的可能重复是,listView中有其他焦点视图(我猜是因为适配器代码)。您必须设置listView项的属性android:DegenantFocusability=“BlocksDescents”才能获得listView上的click事件。@SanjeetAjnabee我已将android:Focusability属性设置为