[英]Item click event of a custom ListView not working in Android
We are working on a project where we have a custom listview and a baseadapter.We are trying to get the item click event of the listview.I pasted a toast within the item click listener in the activity and it is not showing.The following is the code that i have done. 我们正在开发一个具有自定义列表视图和baseadapter的项目。我们正在尝试获取列表视图的项目单击事件。我在活动中的项目单击侦听器中粘贴了一个祝酒词,但未显示。我完成的代码。
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();
}
});
The data for the listview is added dynamically.We have used two dynamic layouts for inflation in the baseadapter.The code in the baseadapter is as follows: 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;
}
}
EDIT: I have added the single item xml files: 编辑:我已经添加了单个项目xml文件:
single_choice_layout.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>
multiple_choice_layout.xml 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: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。
You have to return position of item of a Listview
in getItem
method of BaseAdaptor 您必须在BaseAdaptor的
getItem
方法中返回Listview
的项的位置
@Override
public QuestionsDataModel getItem(int position) {
return question_list_array.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.