我想与您分享我的关注并得到一些反馈。
我正在尝试实现自定义的ListView,并且要求是,
这就是我做的,
MainActivity.java
KwoolyCompanyAdapter adapter = new KwoolyCompanyAdapter(this, R.layout.listviewitem_company,list);
listView = (ListView)findViewById(R.id.listView);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(view.getContext(), DescriptionActivity.class);
intent.putExtra("Company", (String)listView.getItemAtPosition(position));
startActivity(intent);
}
});
如您所见,要执行要求3,我已将setOnItemClickListener放入ListView。
对于自定义Ui,我创建了一个名为KwoolyCompanyAdapter的适配器,它扩展了BaseAdapter。
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
if(convertView==null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(itemLayout, parent, false);
TextView textView = (TextView)convertView.findViewById(R.id.textView);
textView.setText(list.get(pos));
ImageView imageView = (ImageView)convertView.findViewById(R.id.imageView);
BitmapDrawable bitmapDrawable = (BitmapDrawable)ContextCompat.getDrawable(context, GetCompanyResourceId(list.get(pos)));
imageView.setImageDrawable(bitmapDrawable);
Button button = (Button)convertView.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(GetCompanyHomepageURL(list.get(pos))));
context.startActivity(intent);
}
});
}
return convertView;
}
我创建了一个imageView,一个textView和一个按钮,并仅将setOnClickListener附加到该按钮。
问题是..按下按钮引发事件并按预期工作。 但当我点击其他地方时,没有任何反应。
我可以通过将OnClick事件处理程序放到imageView和textView来使其工作,但我认为这是不可取的,因为每次我们需要修复“点击”后的行为时,我们需要修复KwoolyCompanyAdapter。
你觉得怎么样?
谢谢!
答案 0 :(得分:0)
默认情况下,所有Android控件都是可调焦的。
您必须在列表项目视图中的所有控件上添加android:focusable="false"
来删除它,但这有问题,因为您的按钮点击事件无效。正确的方法是通过添加android:descendantFocusability="blocksDescendants"
来阻止项目视图根ViewGroup的可聚焦性。
例如:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:descendantFocusability="blocksDescendants">
<!-- Your child views -->
</LinearLayout>
答案 1 :(得分:0)
删除OnItemClickListener,并使用相同的逻辑将OnClickListener添加到适配器中的convertView。