ListView 项目没有点击
ListView item is not clicking
我有 ListView 片段。具有 web-html 链接的 ListViewItem 存在问题。不可点击。当 android:autoLink="web" "android:descendantFocusability="blocksDescendants 时,@drawable/items_selector 不工作并且不调用 onItemClick” 没有帮助。并且 this 解决方案不起作用。我需要像 "hangouts" 这样的列表视图项目或其他选择了工作项目和工作 html 链接等的应用程序。请帮助我。
OS 版本是 Android 5.1.1
简单 XML...但也不行。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:descendantFocusability="blocksDescendants"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/items_selector"
android:orientation="vertical"
android:padding="2dp">
<TextView
android:id="@+id/themeText"
android:autoLink="web"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/layout_margin"
android:paddingLeft="@dimen/layout_margin"
android:paddingRight="@dimen/layout_margin"
android:text="Bla bla bla"/>
</LinearLayout>
适配器代码:
private class ThemesAdapter extends BaseAdapter {
private LayoutInflater layoutInflater;
private ArrayList<ForumThemeItem> mThemes;
public ThemesAdapter(Context context, ArrayList<ForumThemeItem> themes) {
this.mThemes = themes;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
if (mThemes != null) {
return mThemes.size();
}
return 0;
}
public void add(ArrayList<ForumThemeItem> themes){
mThemes.addAll(themes);
}
public ForumThemeItem getItem(int position) {
return mThemes.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ForumThemeItem mTheme = getItem(position);
ThemesViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ThemesViewHolder();
convertView = layoutInflater.inflate(R.layout.item_theme, null);
convertView.findViewById(R.id.ratingLayout).setVisibility(View.GONE);
viewHolder.themePart = (TextView)convertView.findViewById(R.id.themePart);
viewHolder.themeText = (TextView)convertView.findViewById(R.id.themeText);
viewHolder.themeDate = (TextView)convertView.findViewById(R.id.themeDate);
viewHolder.themeDateUpdate = (TextView)convertView.findViewById(R.id.themeDateUpdate);
viewHolder.userNick = (TextView)convertView.findViewById(R.id.userNick);
viewHolder.vote = (ImageView)convertView.findViewById(R.id.vote);
viewHolder.viewsCount =(TextView)convertView.findViewById(R.id.viewsCount);
viewHolder.replyCount =(TextView)convertView.findViewById(R.id.replyCount);
convertView.setTag(viewHolder);
}else{
viewHolder = (ThemesViewHolder) convertView.getTag();
}
viewHolder.vote.setVisibility(mTheme.isVote() ? View.VISIBLE : View.GONE);
viewHolder.themeText.setText(Html.fromHtml(mTheme.getText()));
viewHolder.userNick.setText(mTheme.getNick());
viewHolder.themeDate.setText(mTheme.getCreateDate()+",");
viewHolder.themeDateUpdate.setText(String.format("обн.: %s",mTheme.getDateUpdate()));
viewHolder.viewsCount.setText(String.format("%s",mTheme.getViewsCount()));
viewHolder.replyCount.setText(String.format("%s", mTheme.getRepliesCount()));
if(mTheme.getPartSubName()==null){
viewHolder.themePart.setText(mTheme.getPartName());
}else{
viewHolder.themePart.setText(String.format("%s (%s)",mTheme.getPartName(),mTheme.getPartSubName()));
}
if(!mTheme.isAnonymously()){
switch (mTheme.getGender()){
case "f":
viewHolder.userNick.setTextColor(getResources().getColor(R.color.woman));
break;
case "m":
viewHolder.userNick.setTextColor(getResources().getColor(R.color.man));
break;
case "n":
viewHolder.userNick.setTextColor(getResources().getColor(R.color.it));
break;
}
}else{
viewHolder.userNick.setTextColor(getResources().getColor(R.color.default_text_color));
}
return convertView;
}
class ThemesViewHolder {
TextView themePart;
TextView themeDate;
TextView themeDateUpdate;
TextView themeText;
TextView userNick;
ImageView vote;
TextView viewsCount;
TextView replyCount;
}
}
我修改适配器。
在适配器中:
viewHolder.themeText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mTextClickListener!=null){
mTextClickListener.onTextClick(position);
}
}
});
在activity中:
@Override
public void onTextClick(int position) {
mThemesList.performItemClick(mThemesList.getAdapter().getView(position, null, null), position, position);
}
但未选中项目(无填充灰色)
要使 TextView html 链接可点击,请执行以下操作
textView.setText(Html.fromHtml("your html text here"));
如果这是一个 ListView 项 - 我怀疑您必须在 ListAdapter - getView 或等效方法中执行此操作。
或者您可以更新 XML 并添加以下内容 - 文档 here
android:autoLink="web"
如果要单击 整行,只需执行 OnClickListener
.
如果你想单击整行和行内的 links(我认为这就是你想要的):
- 您必须创建一个
custom row item
- 创建
interface
- 将
interface listener
发送到 adapter
- 检查文本是否包含link。如果是这样,请使用 listener 发送
你到link
像这样:
interface OnWebLinkClick(){
void onWebLinkClick(String url);
}
在您的适配器上,您为 OnWebLinClick Listener
添加了另一个参数:
public ThemesAdapter(Context context, ArrayList<ForumThemeItem> themes, OnWebLinClick mListener){
this.mListener = mListener;
}
检查文本是否包含Link并执行onWebLinkClick(urlOnTextView)
并在webView
中打开它
我有 ListView 片段。具有 web-html 链接的 ListViewItem 存在问题。不可点击。当 android:autoLink="web" "android:descendantFocusability="blocksDescendants 时,@drawable/items_selector 不工作并且不调用 onItemClick” 没有帮助。并且 this 解决方案不起作用。我需要像 "hangouts" 这样的列表视图项目或其他选择了工作项目和工作 html 链接等的应用程序。请帮助我。 OS 版本是 Android 5.1.1
简单 XML...但也不行。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:descendantFocusability="blocksDescendants"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/items_selector"
android:orientation="vertical"
android:padding="2dp">
<TextView
android:id="@+id/themeText"
android:autoLink="web"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/layout_margin"
android:paddingLeft="@dimen/layout_margin"
android:paddingRight="@dimen/layout_margin"
android:text="Bla bla bla"/>
</LinearLayout>
适配器代码:
private class ThemesAdapter extends BaseAdapter {
private LayoutInflater layoutInflater;
private ArrayList<ForumThemeItem> mThemes;
public ThemesAdapter(Context context, ArrayList<ForumThemeItem> themes) {
this.mThemes = themes;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
if (mThemes != null) {
return mThemes.size();
}
return 0;
}
public void add(ArrayList<ForumThemeItem> themes){
mThemes.addAll(themes);
}
public ForumThemeItem getItem(int position) {
return mThemes.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ForumThemeItem mTheme = getItem(position);
ThemesViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ThemesViewHolder();
convertView = layoutInflater.inflate(R.layout.item_theme, null);
convertView.findViewById(R.id.ratingLayout).setVisibility(View.GONE);
viewHolder.themePart = (TextView)convertView.findViewById(R.id.themePart);
viewHolder.themeText = (TextView)convertView.findViewById(R.id.themeText);
viewHolder.themeDate = (TextView)convertView.findViewById(R.id.themeDate);
viewHolder.themeDateUpdate = (TextView)convertView.findViewById(R.id.themeDateUpdate);
viewHolder.userNick = (TextView)convertView.findViewById(R.id.userNick);
viewHolder.vote = (ImageView)convertView.findViewById(R.id.vote);
viewHolder.viewsCount =(TextView)convertView.findViewById(R.id.viewsCount);
viewHolder.replyCount =(TextView)convertView.findViewById(R.id.replyCount);
convertView.setTag(viewHolder);
}else{
viewHolder = (ThemesViewHolder) convertView.getTag();
}
viewHolder.vote.setVisibility(mTheme.isVote() ? View.VISIBLE : View.GONE);
viewHolder.themeText.setText(Html.fromHtml(mTheme.getText()));
viewHolder.userNick.setText(mTheme.getNick());
viewHolder.themeDate.setText(mTheme.getCreateDate()+",");
viewHolder.themeDateUpdate.setText(String.format("обн.: %s",mTheme.getDateUpdate()));
viewHolder.viewsCount.setText(String.format("%s",mTheme.getViewsCount()));
viewHolder.replyCount.setText(String.format("%s", mTheme.getRepliesCount()));
if(mTheme.getPartSubName()==null){
viewHolder.themePart.setText(mTheme.getPartName());
}else{
viewHolder.themePart.setText(String.format("%s (%s)",mTheme.getPartName(),mTheme.getPartSubName()));
}
if(!mTheme.isAnonymously()){
switch (mTheme.getGender()){
case "f":
viewHolder.userNick.setTextColor(getResources().getColor(R.color.woman));
break;
case "m":
viewHolder.userNick.setTextColor(getResources().getColor(R.color.man));
break;
case "n":
viewHolder.userNick.setTextColor(getResources().getColor(R.color.it));
break;
}
}else{
viewHolder.userNick.setTextColor(getResources().getColor(R.color.default_text_color));
}
return convertView;
}
class ThemesViewHolder {
TextView themePart;
TextView themeDate;
TextView themeDateUpdate;
TextView themeText;
TextView userNick;
ImageView vote;
TextView viewsCount;
TextView replyCount;
}
}
我修改适配器。
在适配器中:
viewHolder.themeText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mTextClickListener!=null){
mTextClickListener.onTextClick(position);
}
}
});
在activity中:
@Override
public void onTextClick(int position) {
mThemesList.performItemClick(mThemesList.getAdapter().getView(position, null, null), position, position);
}
但未选中项目(无填充灰色)
要使 TextView html 链接可点击,请执行以下操作
textView.setText(Html.fromHtml("your html text here"));
如果这是一个 ListView 项 - 我怀疑您必须在 ListAdapter - getView 或等效方法中执行此操作。
或者您可以更新 XML 并添加以下内容 - 文档 here
android:autoLink="web"
如果要单击 整行,只需执行 OnClickListener
.
如果你想单击整行和行内的 links(我认为这就是你想要的):
- 您必须创建一个
custom row item
- 创建
interface
- 将
interface listener
发送到adapter
- 检查文本是否包含link。如果是这样,请使用 listener 发送 你到link
像这样:
interface OnWebLinkClick(){
void onWebLinkClick(String url);
}
在您的适配器上,您为 OnWebLinClick Listener
添加了另一个参数:
public ThemesAdapter(Context context, ArrayList<ForumThemeItem> themes, OnWebLinClick mListener){
this.mListener = mListener;
}
检查文本是否包含Link并执行onWebLinkClick(urlOnTextView)
并在webView