我已经实现了一个列表视图。
列表视图中的每个项目都有两个元素 - TextView和Button。
现在我已经实现了ArrayList Adapter,以使我的listview可以点击。
目前正在发生的事情是,每当我点击listview中的任何元素时,我的OnItemClickListener都会被调用。
现在我想要做的是我只想制作我的按钮clickabe而不是整个元素。
以下是我实施的代码。
public class SurveyListActivity extends ListActivity {
static private ArrayList<Survey> EU=new ArrayList<Survey>();
static {
EU.add(new Survey(R.string.Survey1, R.drawable.completed,R.string.Survey1));
EU.add(new Survey(R.string.Survey2, R.drawable.completed,R.string.Survey2));
EU.add(new Survey(R.string.Survey3, R.drawable.inprogress,R.string.Survey3));
EU.add(new Survey(R.string.Survey4, R.drawable.inprogress,R.string.Survey4));
EU.add(new Survey(R.string.Survey5,R.drawable.inprogress,R.string.Survey5));
EU.add(new Survey(R.string.Survey6, R.drawable.start,R.string.Survey6));
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setListAdapter(new SurveyAdapter());
}
@Override
protected void onListItemClick(ListView l, View v,int position, long id)
{
Toast.makeText(SurveyListActivity.this, "You Selected :- " + EU.get(position).name, Toast.LENGTH_LONG).show();
}
static class Survey
{
int name;
int status;
int result;
Survey(int name, int status, int result)
{
this.name=name;
this.status=status;
this.result=result;
}
}
class SurveyAdapter extends ArrayAdapter<Survey>
{
SurveyAdapter()
{
super(SurveyListActivity.this, R.layout.row, R.id.name, EU);
}
@Override
public View getView(int position, View convertView,
ViewGroup parent)
{
SurveyWrapper wrapper=null;
if (convertView==null)
{
convertView=getLayoutInflater().inflate(R.layout.row, null);
wrapper=new SurveyWrapper(convertView);
convertView.setTag(wrapper);
}
else
{
wrapper=(SurveyWrapper)convertView.getTag();
}
wrapper.populateFrom(getItem(position),position);
return(convertView);
}
}
class SurveyWrapper
{
private TextView name=null;
private ImageView status=null;
private View row=null;
SurveyWrapper(View row)
{
this.row=row;
}
TextView getName()
{
if (name==null)
{
name=(TextView)row.findViewById(R.id.name);
}
return(name);
}
ImageView getstatus()
{
if (status==null)
{
status=(ImageView)row.findViewById(R.id.flag);
}
return(status);
}
void populateFrom(Survey survey, int i)
{
if((i%2)!=0)
{
row.setBackgroundColor(Color.LTGRAY);
getName().setBackgroundColor(Color.LTGRAY);
}
getName().setText(survey.name);
getstatus().setImageResource(survey.status);
}
}
}
答案 0 :(得分:0)
如果我正确地站了你,你需要删除onItemClickedListener并将onClick监听器附加到按钮上。您应该能够在行布局xml中设置通用按钮单击侦听器,并确定通过视图对象的父级(应该是ListView)单击哪个按钮。
答案 1 :(得分:0)
onListItemClick
会做到这一点:回复点击项目的任何位置。如果您只希望项目中的部分视图可点击,请在适配器的getView
中执行此操作:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
SurveyWrapper wrapper=null;
if (convertView==null)
{
convertView=getLayoutInflater().inflate(R.layout.row, null);
wrapper=new SurveyWrapper(convertView);
convertView.setTag(wrapper);
}
else
{
wrapper=(SurveyWrapper)convertView.getTag();
}
wrapper.populateFrom(getItem(position),position);
convertView.findViewById(R.id.my_button).setOnClickListener(new onClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(SurveyListActivity.this, "You Selected :- " + EU.get(position).name, Toast.LENGTH_LONG).show();
}
});
return(convertView);
}
并完全删除onItemClickListener
。
答案 2 :(得分:0)
使用自定义适配器,然后将setOnClickListener添加到特定项目(按钮)
Button btnAction= (Button)v.findViewById(R.id.btnAction);
btnAction.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast toast = Toast.makeText(mContext.getApplicationContext(), "Click", Toast.LENGTH_SHORT);
toast.show();
}
});