我的应用程序中有一个AutoCompleteTextView可以正常工作.我已经成功创建了一个onClickItemListener.问题是如何获取用户选择的文本.事情就是这样:我有一个ArrayList,其中的单词被传递给Adapter来搜索建议.当用户键入单词时,建议列表变得更短(在UI侧的行中),所以当我想从索引中的ArrayList获取单词时,用户选择了我得到错误的单词,因为索引不匹配.如何获得用户选择的文本(String)而不必弄乱索引?这是我的代码:
public class AutocompleteActivity extends BaseActivity {
private DBManager m_db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.autocomplete);
m_db = new DBManager(this);
final ArrayList<String> words = m_db.selectAllWords();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem, words);
AutoCompleteTextView tv = (AutoCompleteTextView)findViewById(R.id.autocomplete);
tv.setThreshold(1);
tv.setAdapter(adapter);
tv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Log.i("SELECTED TEXT WAS------->", words.get(arg2));
}
});
}
}
Run Code Online (Sandbox Code Playgroud) 我在arrayadapter中添加了arraylist,其中包含每个由两个元素/项组成的对象,我已成功为setListAdapter设置了该适配器,现在我想在listview的setOnItemClickListener中获取这些项.
这是我的代码
TweetListAdaptor adaptor = new TweetListAdaptor(this,R.layout.list_item, tweets);
setListAdapter(adaptor);
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view,int position, long id)
{
//here i want to get the items
}
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试(用于学习目的)我自己实现的简单AdapterView,其中的项目来自基本的适配器(来自sdk示例的ImageAdapter).
实际代码是这样的:
public class MyAdapterView extends AdapterView<ImageAdapter> implements AdapterView.OnItemClickListener{
private ImageAdapter mAdapter;
public MyAdapterView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initThings();
}
private void initThings(){
setOnItemClickListener(this);
}
@Override
public ImageAdapter getAdapter() {
// TODO Auto-generated method stub
return mAdapter;
}
@Override
public void setAdapter(ImageAdapter adapter) {
// TODO Auto-generated method stub
mAdapter=adapter;
requestLayout();
}
View obtainView(int position) {
View child = mAdapter.getView(position, null, this);
return child;
}
@Override
protected void onLayout(boolean changed, int l, int t, int …Run Code Online (Sandbox Code Playgroud) 我想在单击ImageView时从listView中删除某一行.我的listview看起来像这样:

我希望在单击最后一个图像时删除该行.这是我的适配器:
public class UserItemAdapter extends ArrayAdapter<Photos.Record> {
private ArrayList<Photos.Record> photos;
public UserItemAdapter(Context context, int textViewResourceId, ArrayList<Photos.Record> photos) {
super(context, textViewResourceId, photos);
this.photos = photos;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.photorowlist, null);
v.setClickable(true);
v.setFocusable(true);
}
Photos.Record user = photos.get(position);
if (user != null) {
TextView photo_name = (TextView) v.findViewById(R.id.photoname);
if (photo_name != null) {
photo_name.setText(user.photo_name);
}
}
v.setOnClickListener(new …Run Code Online (Sandbox Code Playgroud) 在引入RecyclerView(及其强制ViewHolder模式)之前,我通常将任何单击事件委托给其对应Activity/ Fragment使用setOnItemClickListener().(因为我在开发Android时主要看Activity/ Fragment作为"控制器"对象,因此应该在视图中对视图进行任何修改.)
现在,RecyclerView并没有真正以同样的方式对待它的孩子,并且setOnItemClickListener()不再为它实现那些(或类似的)方法 - 我应该在哪里处理可能发生的点击事件?我不知道......但处理它们Adapter对我来说似乎很尴尬.
我们该怎么做呢?
提前致谢!
我正在使用net上发现的Expandable ListView示例
活动:
public class ExpandableListViewActivity extends ExpandableListActivity {
/**
* strings for group elements
*/
static final String arrGroupelements[] = { "India", "Australia", "England",
"South Africa" };
/**
* strings for child elements
*/
static final String arrChildelements[][] = {
{ "Sachin Tendulkar", "Raina", "Dhoni", "Yuvi" },
{ "Ponting", "Adam Gilchrist", "Michael Clarke" },
{ "Andrew Strauss", "kevin Peterson", "Nasser Hussain" },
{ "Graeme Smith", "AB de villiers", "Jacques Kallis" } };
DisplayMetrics metrics;
int width;
ExpandableListView expList;
@Override …Run Code Online (Sandbox Code Playgroud) 我正在使用sherlock actionbar库以支持许多设备.我有一个viewPager有3个片段:
listView,每个项目有一个textView和一个imageViewgridView,每个项目都有一个textView和一个imageViewtextView现在.正如我在Google IO视频中听到的那样(并且自Lint告诉我),建议将下一个样式用于所有活动:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="@style/Theme.Sherlock">
<item name="android:windowBackground">@null</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
这在很多设备上对我有用.
然而,在模拟器上,使用版本2.3.3,以及在galaxy nexus上,当我滚动(viewPager或者任何一个adapterViews)时,一切都只是涂抹,所以我得到了很多白色像素,好像什么都没有刷新.
我甚至试图为android:cacheColorHint="#00000000"我的所有adapterView设置,但它仍然会发生.
到底是怎么回事?我怎么能解决这个问题?我喜欢添加上面的内容,因为它删除了每个应用程序出现的丑陋S3的丑陋渐变背景.
我现在有一个ListView,激活上下文ActionBar中ListView的OnItemLongClickListener.
我试图通过点击它们来选择项目,但只有在Contextual ActionBar启动时才能选择项目.
问题是,当我检查时isItemChecked(),为了切换项目的选择状态,它总是返回与预期相反的状态.
以下是我如何实现OnItemClickListener:
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (mActionMode != null){
list.setItemChecked(position, !list.isItemChecked(position));
}
else{
list.setItemChecked(position, false);
}
}
});
Run Code Online (Sandbox Code Playgroud)
编辑:这是非常古怪..这段代码切换选择状态:
list.setItemChecked(position, list.isItemChecked(position));
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事!?
编辑2:啊,看起来android自动检查并取消选中每个项目...有没有办法改变这种行为并自己处理?
我在显示listview时实现了listview customadapter,它显示了如何重新启动它.
requestLayout() improperly called by android.widget.RelativeLayout{b42acc20 V.E..... ......ID 0,-52-480,0 #7f0700ec app:id/ptr_id_header} during layout: running second layout pass
Run Code Online (Sandbox Code Playgroud)
java代码
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
if (view == null)
{
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.listitemrow, null);
}
RssItem rssItem = mRssItemList.get(position);
if (rssItem != null)
{
TextView title = (TextView) view.findViewById(R.id.rowtitle);
if (title != null)
{
title.setText(rssItem.getTitle());
}
}
return view;
}
Run Code Online (Sandbox Code Playgroud) 我知道我应该测量孩子onMeasure()并将其布局onLayout().问题是我应该在这些方法中添加/回收视图,以便我可以一起测量所有孩子,看看它们是如何相互定位的(即网格,列表或其他)?
我的第一种方法是在添加/回收的观点onLayout(),但是从这一点来说,因为他们不会被添加到适配器视图但我不能衡量我的孩子们getChildCount()回报0的onMeasure().如果没有孩子已经布置,我无法测量AdapterView本身,因为它真的取决于他们的相互位置,对吗?
当动态添加/删除子项时,我对AdapterView中的android布局过程感到困惑.
android android-custom-view android-layout android-adapterview