我想获取光标的当前记录,而不仅仅是ID,以便我可以操作上下文菜单.
我在这里看到这个示例,向您展示如何获取ID:
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case DELETE_ID:
AdapterView.AdapterContextMenuInfo info=
(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
delete(info.id);
return(true);
}
return(super.onOptionsItemSelected(item));
}
Run Code Online (Sandbox Code Playgroud)
这很棒,因为它允许我获取所单击的上下文菜单的相应SQLite数据库ID,这将允许我编写一个函数来进行查找.但我当然可以重用当前的光标吗?
我试过这样做:
Cursor c = (Cursor) this.getListAdapter().getItem((int) info.id);
String itemPriority = c.getInt(1);
Log.v(TAG, "Current item:" + itemPriority);
Run Code Online (Sandbox Code Playgroud)
但是光标线似乎只返回数据库的模式而不是我之后的记录.
请有人请说清楚.
编辑:感谢@azgolfer我找到了解决方案.我使用fillData()方法来填充适配器.通常,这是在没有变量的情况下声明的.我不得不用一个字段变量重新定义这个方法.在onContextItemSelected中使curstor适配器可见的代码的相关部分在这里:
private void fillData() {
Cursor itemsCursor = mDbHelper.fetchAllItemsFilter(mListId, mStatusFilter);
startManagingCursor(itemsCursor);
mItemAdaptor = new ItemAdapter(this, itemsCursor);
this.setListAdapter(mItemAdaptor);
}
Run Code Online (Sandbox Code Playgroud) 我有一个视图,其中包含一个绑定到游标适配器的ListView.当光标内容发生变化时,我想将ListView保持在顶部,然后在我的自定义光标适配器中添加:
@Override
protected void onContentChanged() {
// ...
myListView.scrollTo(0, 0);
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.然后我读到某个地方将这个动作排队如下:
myListView.post(new Runnable() {
public void run() {
myListView.scrollTo(0, 0);
}
});
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.
当内容发生变化时,如何将ListView保持在顶部?
编辑:
只是为了尝试,我添加了一个按钮,并在其onClickListener中调用scrollTo(),它不起作用!我错过了什么?
我正在读取手机上所选文件夹中的文件,就像您在下面的代码中看到的那样.我怎么能用Imagefile来完成这项工作?最后,我喜欢有一个图像列表,其中包含每个图像的预览.像那样:
[IMG](imgview) - [文件名](字符串)
for(int i=0; i < files.length; i++) {
File file = files[i];
map = new HashMap<String, String>();
if(!file.isHidden() && file.canRead()) {
path.add(file.getPath());
if(file.isDirectory()) {
map.put("img_list", ""+R.drawable.folder);
map.put("string_cell", file.getName()+"/");
your_array_list.add(map);
}else{
ImageFileFilter filefilter = new ImageFileFilter(file);
if(filefilter.accept(file)){
//Its an imagefile
// ==> I like to replace the ""+R.drawable.image with the file that I have read
map.put("img_list", ""+R.drawable.image);
} else {
//Its not an image file
}
map.put("string_cell", file.getName());
your_array_list.add(map);
}
}
}
SimpleAdapter mSchedule = new SimpleAdapter(this, your_array_list, …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的适配器设置onItemClickListener,它可以工作,但现在我不知道如何获得点击对象?我有一个带注释的列表,点击后我想开始点击备注id的新活动.
private DatabaseHelper dbhelper;
SimpleCursorAdapter adapter = null;
public OnItemClickListener listener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "it works", Toast.LENGTH_SHORT).show();
}
};
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.first);
dbhelper = new DatabaseHelper(getApplicationContext());
Cursor cursor = dbhelper.getAllNotes();
startManagingCursor(cursor);
ListView lv = (ListView)findViewById(android.R.id.list);
String[] columns = new String[] {"NoteTitle", "NoteDate"};
int[] to = new int[] { R.id.title_entry, R.id.date_entry};
adapter = new SimpleCursorAdapter(this, R.layout.note_entry, cursor, columns, …Run Code Online (Sandbox Code Playgroud) 我在我的视图上设置了一个SimpleCursorAdapter,当我从数据库中获取数据时,它工作正常.使用ORDER BY日期DESC子句运行查询.所有行都在我的ListView中很好地获取和显示,我正在使用adapter.setViewBinder()为项添加一些逻辑(添加缩略图).
代码是这样的:
// Setup the adapter
adapter = new SimpleCursorAdapter(this, R.layout.rowitem, cursor, FROM, TO);
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
// Only taylor the ImageView in the adapter-list, skip everything else.
if (view.getId() != R.id.imageItem)
return false;
// here goes the logic, but it's cut away due to its size
}
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
现在我想添加一些逻辑:如果两个项之间的日期发生变化,我想添加一个包含日期的小分隔栏,如下所示:
=== DATE1 ===============
Item 1
Item 2
=== DATE2 ===============
Item 3
=== DATE3 ===============
Item …Run Code Online (Sandbox Code Playgroud) 如何使用SimpleCursorAdapter获取ListView以在ViewPager中显示?单独的Pager工作得很好,ListView在ListActivity中工作正常,但我不知道如何让它在Activity中工作(也许这就是问题).
public class Player extends Activity {
private ViewPager pager;
private static int NUMERO_DE_TELAS = 3;
private AdaptadorDeTelas adaptador;
//Para debug apagar no final
final String BABAS = "babas";
ContentResolver mContentResolver;
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Adaptador para criar o viewpager
adaptador = new AdaptadorDeTelas();
pager = (ViewPager)findViewById(R.id.pageradapter);
pager.setAdapter(adaptador);
pager.setCurrentItem(1);
}
private class AdaptadorDeTelas extends PagerAdapter{
@Override
public int getCount(){
return NUMERO_DE_TELAS;
}
@Override
public Object instantiateItem(View collection, int position){
View layout;
LayoutInflater inflater = …Run Code Online (Sandbox Code Playgroud) 我想创建一个非常简单的游标自定义游标适配器,以方便在点击时更改行项目的颜色.使用以下代码
private static int save = -1;
public void onListItemClick(ListView parent, View v, int position, long id) {
parent.getChildAt(position).setBackgroundColor(Color.BLUE);
if (save != -1 && save != position){
parent.getChildAt(save).setBackgroundColor(Color.BLACK);
}
save = position;
}
Run Code Online (Sandbox Code Playgroud)
我从这个线程获得了代码/sf/answers/535491631/
我会使用一个简单的游标适配器并将代码放在onClick中,但由于ListFragment中的默认列表重用了视图,因此滚动多个视图时会突出显示.谈到IRC,有人建议我创建一个自定义游标适配器.但是,我似乎无法找到如何执行此操作的最佳实践,以及上述代码段所适用的位置.可以非常感谢帮助.
public class AreaCursorAdapter extends CursorAdapter {
private Context context;
public AreaCursorAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView list_item = (TextView)view.findViewById(android.R.id.text1);
list_item.setText(cursor.getString(cursor.getColumnIndex(INDICATOR_NAME)));
}
@Override
public View newView(Context context, …Run Code Online (Sandbox Code Playgroud) android android-listview simplecursoradapter android-listfragment android-cursoradapter
谁能告诉我如何在自定义列表视图中显示电话号码和联系人姓名?代码粘贴在下面
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class AddContacts extends Activity implements OnClickListener {
ListView list;
Cursor cursor;
SimpleCursorAdapter adapter;
String phoneNumber;
Button AddNumber;
EditText number1;
EditText number2;
EditText number3;
String contact1;
String contact2;
CheckBox checkBox;
String contact_name;
static final String TAG = "In AddContacts";
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
AddNumber = (Button) …Run Code Online (Sandbox Code Playgroud) 我试图使用自定义适配器访问列表活动.我已经直接尝试了它而没有使用任何自定义适配器它工作正常,但因为我想在列表视图中添加更多功能我想实现自定义适配器.现在我有试过但我得到一个没有数据可见的空列表视图.列表 - 活动
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DURATION,
};
//query
musiccursor = this.managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,projection,selection,null,sortOrder);
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
int a[]= new int[]{R.id.TitleSong,R.id.Artist};
Custom_Adapter adapter = new Custom_Adapter(this,R.layout.music_items, musiccursor, new String[]{MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.ARTIST} ,a);
this.setAdapter(adapter);
}
}
Run Code Online (Sandbox Code Playgroud)
定制适配器
public class Custom_Adapter extends SimpleCursorAdapter {
private Context mContext;
private Context appContext;
private int layout;
private Cursor cr;
private final …Run Code Online (Sandbox Code Playgroud) android listview cursor android-listview simplecursoradapter
我正在使用CursorLoder类从android的媒体内容提供者获取Genre列表.下面是我的光标查询来获取类型列表.
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// currently filtering.
Uri baseUri;
baseUri = MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI;
String[] STAR = { "*" };
return new CursorLoader(getActivity(), baseUri, STAR, null, null, null );
}
Run Code Online (Sandbox Code Playgroud)
现在,我从媒体内容提供商处获得了所有类型列表,但是我得到的数据存在问题.我也得到了之前创建的流派名称,但现在我没有歌曲.
我只想要有歌曲的流派,而不是没有歌曲的流派名称.
任何人都可以帮助我吗?
UPDATE
我可以使用下面的代码获取所有类型及其歌曲...
private void getGenresList() {
//-------------------------------------
int index;
long genreId;
int count;
Uri uri;
Cursor genrecursor;
Cursor tempcursor;
String[] proj1 = {MediaStore.Audio.Genres.NAME, MediaStore.Audio.Genres._ID};
String[] proj2={MediaStore.Audio.Media.DISPLAY_NAME};
genrecursor=getActivity().getContentResolver().query(MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI,proj1,null, null, null);
if(genrecursor.moveToFirst())
{
do{
index = genrecursor.getColumnIndexOrThrow(MediaStore.Audio.Genres.NAME);
System.out.println("GENRE NAME: "+genrecursor.getString(index));
System.out.println("======================================");
index = genrecursor.getColumnIndexOrThrow(MediaStore.Audio.Genres._ID);
genreId=Long.parseLong(genrecursor.getString(index));
uri = …Run Code Online (Sandbox Code Playgroud) android android-contentprovider simplecursoradapter android-cursorloader