我有一个列表视图,其中行基本上由两个TextView(标题和内容)组成。
第二个TextView可以有一个长文本,所以我设置maxLines="6"
。当用户点击行时,我会删除maxLines
以显示全文。
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
TextView content = (TextView ) view.findViewById(R.id.content);
int limit = getResources().getInteger(R.integer.default_max_lines);
if (content.getMaxLines() > limit) {
content.setMaxLines(limit);
}
else {
content.setMaxLines(Integer.MAX_VALUE);
}
}
以上代码效果很好。我希望能够选择我的第二个TextView( content ),所以我设置android:textIsSelectable="true"
(也尝试以编程方式设置)。
但我无法展开/折叠我的TextView,因为不再调用onItemClick
那是因为textIsSelectable
捕获了所有点击事件......
来自Android doc:
当您调用此方法来设置textIsSelectable的值时,它会将可聚焦标记,focusableInTouchMode,clickable和longClickable设置为相同的值。这些标志对应于android:focusable,android:focusableInTouchMode,android:clickable和android:longClickable属性。要将这些标志中的任何一个恢复为先前设置的状态,请调用以下一种或多种方法:setFocusable(),setFocusableInTouchMode(),setClickable()或setLongClickable()。
我试图在setTextIsSelectable(true)
之后将这些标志设置为false,但我无法使其正常工作。
那么,任何想法如何同时使用textIsSelectable
和onItemClick
?
PS:仅支持Android&gt; 4.0。
答案 0 :(得分:-4)
使用以下代码它将100%
public class CustomAdapter extends ArrayAdapter<Sample> {
public ArrayList<Sample> mlist;
public Context context;
public LayoutInflater inflater;
public CustomAdapter(Context context, int resource, ArrayList<Sample> mlist) {
super(context, resource);
this.mlist = mlist;
this.context = context;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getPosition(Sample item) {
return super.getPosition(item);
}
@Override
public Sample getItem(int position) {
return mlist.get(position);
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.listitem, null);
TextView text1 = (TextView) convertView.findViewById(R.id.item1);
TextView text2 = (TextView) convertView.findViewById(R.id.item2);
text1.setText(mlist.get(position).getListitem1());
text2.setText(mlist.get(position).getListitem2());
text2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// you just put your Logic here And use this custom adapter to
// load your Data By using this particular custom adapter to
// your listview
}
});
return convertView;
}
}
您只需在Mainactivity中使用此代码
mAdapter = new CustomAdapter(this, R.layout.listitem, mListItems);
mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);
mPullRefreshListView.setAdapter(mAdapter);