繁体   English   中英

如何使列表视图的文本视图可点击

[英]how to make textview of the listview clickable

我有一个包含一些Textviews的自定义listview 我将列表视图设置为adapter ,如下所示:

BestandTypAdapter bestandTypAdapter = new BestandTypAdapter(getActivity(), R.layout.bestand_type_liste, dataList);
li.setAdapter(bestandTypAdapter);

如下所示,在 bestand_type_liste 布局的代码中,TextView 是可点击的

bestand_type_liste :

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/layout_depots_typ"
android:padding="5dip" >

<TableRow
    android:paddingRight="10dip"
     android:paddingLeft="10dip"
    >

    <TextView
        android:id="@+id/BESTAND_TYP_NAME"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_weight="0.50"
        android:clickable="true"/>  <<=================

getView()的方法adapter我使用onClickListener相关联的名称TexView使得当点击了名称其位置上所显示logCat如下:

holder.name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("", "position_ : " + pos);
            }
        });

问题是,当我点击listview项时,什么也没有出现,如何解决这个问题

只需尝试为 TextView 添加此属性:

android:focusable="false"

阵列适配器示例,这是主要活动。

public class ListViewMain extends AppCompatActivity {
private ArrayList<BrandModel> alBrand;
private ListView list;
private CustomAdapter custAdapter;
private AdapterView.OnItemClickListener messageClickedHandler;
private View vHeader;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    setupDefaults();
    setupEvents();
}

public void init() {
    //list view
    list = (ListView) findViewById(R.id.listView);
    //Array list
    alBrand = new ArrayList<>();
    //Custom Adapter
    custAdapter = new CustomAdapter(this, R.layout.textlistview, alBrand);
    //View
    vHeader = getLayoutInflater().inflate(R.layout.listviewheader, null, false);
}

public void setupDefaults() {
    addBrandAndAdapter();
}

public void addBrandAndAdapter() {
    alBrand.add(new BrandModel(getResources().getString(R.string.And), R.drawable.android));
    alBrand.add(new BrandModel(getResources().getString(R.string.Mac), R.drawable.apple));
    alBrand.add(new BrandModel(getResources().getString(R.string.Tizen), R.drawable.insta));
    alBrand.add(new BrandModel(getResources().getString(R.string.window), R.drawable.windows));
    list.addHeaderView(vHeader);
    list.setAdapter(custAdapter);
}

public void setupEvents() {
    messageClickedHandler = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            Toast.makeText(getApplicationContext(), "Click ListItem Number " + position, Toast.LENGTH_LONG).show();
            System.out.println("Selected");
        }
    };
    list.setOnItemClickListener(messageClickedHandler);
}

}

  1. 阵列适配器

public class CustomAdapter extends ArrayAdapter<BrandModel> {
ArrayList<BrandModel> alBrand = new ArrayList<>();

public CustomAdapter(Context context, int tvResId, ArrayList<BrandModel> alObjects) {
    super(context, tvResId, alObjects);
    alBrand = alObjects;
}

@Override
public int getCount() {
    return super.getCount();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View add = convertView;
    BrandHolder holder = null;
    if (add == null) {
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        add = inflater.inflate(R.layout.textlistview, null);
        holder = new BrandHolder();
        holder.tvName = (TextView) add.findViewById(R.id.tvName);
        holder.ivImage = (ImageView) add.findViewById(R.id.ivIcon);
        add.setTag(holder);

    } else {
        holder = (BrandHolder) add.getTag();
    }
    holder.tvName.setText(alBrand.get(position).getStrBrdName());
    holder.ivImage.setImageResource(alBrand.get(position).getImgBrdLogo());
    return add;
}

static class BrandHolder {
    TextView tvName;
    ImageView ivImage;
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM