私はページを切り替えるためにViewpagerを使用しています。私は私のカスタムカーソルアダプタからデータを取得しているViewPagerの5ページを持っています。問題は、ページの切り替えがスムーズでない、不安定です。何が間違っているのですか?どんな助けでも本当に感謝しています。将来的にはViewPagerのページを切り替えるのがスムーズでない
// MYPAGER
private class MyPagerAdapter extends PagerAdapter{
public int getCount()
{
return 5;
}
public Object instantiateItem(View collection, int position)
{
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view;
SharedPreferences myoptions = getSharedPreferences("options", Context.MODE_PRIVATE);
SharedPreferences.Editor prefEditor = myoptions.edit();
view = inflater.inflate(R.layout.all_tasks, null);
((ViewPager) collection).addView(view, 0);
//getting list view
lv= (ListView)findViewById(R.id.list);
MyAdapter adapter1;
switch (position) {
case 0:
prefEditor.putInt("filter", 5);
prefEditor.commit();
if(selectedList!=null)
{
cursor1= managedQuery(uri, PROJECTION, where +" AND "+ taskColumns.LIST+ "= ?"
+" AND "+ taskColumns.DONE+ "= ?"
,new String[] {selectedList,"0"}, sortingOrder);
}
else
cursor1= managedQuery(uri, PROJECTION, where+" AND "+ taskColumns.DONE+ "= ?",new String[] {"0"}, sortingOrder);
if (cursor1 != null)
{
cursor1.moveToFirst();
}
adapter1 = new MyAdapter(tasks.this,cursor1);
lv.setAdapter(adapter1);
break;
case 1:
prefEditor.putInt("filter", 4);
prefEditor.commit();
if(selectedList!=null)
{
cursor1= managedQuery(uri, PROJECTION, taskColumns.LIST+ "= ?"
,new String[] {selectedList}, sortingOrder);
}
else
cursor1= managedQuery(uri, PROJECTION, where,null, sortingOrder);
if (cursor1 != null)
{
cursor1.moveToFirst();
}
adapter1 = new MyAdapter(tasks.this,cursor1);
lv.setAdapter(adapter1);
break;
case 2:
prefEditor.putInt("filter", 1);
prefEditor.commit();
if(selectedList!=null)
{
cursor1= managedQuery(uri, PROJECTION, where +" AND "+ taskColumns.LIST+ "= ?"
,new String[] {selectedList}, sortingOrder);
}
else
cursor1= managedQuery(uri, PROJECTION, where,null, sortingOrder);
if (cursor1 != null)
{
cursor1.moveToFirst();
}
adapter1 = new MyAdapter(tasks.this,cursor1);
lv.setAdapter(adapter1);
break;
case 3:
prefEditor.putInt("filter", 2);
prefEditor.commit();
if(selectedList!=null)
{
cursor1= managedQuery(uri, PROJECTION, where +" AND "+ taskColumns.LIST+ "= ?"
,new String[] {selectedList}, sortingOrder);
}
else
cursor1= managedQuery(uri, PROJECTION, where,null, sortingOrder);
if (cursor1 != null)
{
cursor1.moveToFirst();
}
adapter1 = new MyAdapter(tasks.this,cursor1);
lv.setAdapter(adapter1);
break;
case 4:
prefEditor.putInt("filter", 3);
prefEditor.commit();
if(selectedList!=null)
{
cursor1= managedQuery(uri, PROJECTION, where +" AND "+ taskColumns.LIST+ "= ?"
,new String[] {selectedList}, sortingOrder);
}
else
cursor1= managedQuery(uri, PROJECTION, where,null, sortingOrder);
if (cursor1 != null)
{
cursor1.moveToFirst();
}
adapter1 = new MyAdapter(tasks.this,cursor1);
lv.setAdapter(adapter1);
break;
}
return view;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState()
{
return null;
}
}
//カスタムアダプタ
static class ViewHolder {
public TextView task;
public TextView note;
public ImageView note_img;
public TextView priority;
public CheckBox done;
public TextView showingByList;
public TextView space;
public LinearLayout b;
}
public class MyAdapter extends CursorAdapter {
private final int taskIndex;
private final LayoutInflater Inflater;
private final int doneIndex;
private final int priorIndex;
private final int rowIndex;
private final int taskListIndex;
private final int NoteIndex;
boolean innewView;
public MyAdapter(Context context, Cursor c)
{
super(context, c);
this.taskIndex = c.getColumnIndex(taskColumns.TASK);
this.priorIndex = c.getColumnIndex(taskColumns.PRIORITY);
this.doneIndex = c.getColumnIndex(taskColumns.DONE);
this.rowIndex = c.getColumnIndex(taskColumns._ID);
this.taskListIndex = c.getColumnIndex(taskColumns.LIST);
this.NoteIndex = c.getColumnIndex(taskColumns.NOTE);
this.Inflater = LayoutInflater.from(context);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
View v = Inflater.inflate(R.layout.tasks_row, parent, false);
innewView=true;
return v;
}
@Override
public void bindView(View view, Context context, final Cursor cursor) {
final ViewHolder viewHolder;
if(innewView)
{
viewHolder = new ViewHolder();
viewHolder.task = (TextView) view.findViewById(R.id.task);
viewHolder.note = (TextView) view.findViewById(R.id.note);
viewHolder.note_img = (ImageView) view.findViewById(R.id.note_img);
viewHolder.priority = (TextView) view.findViewById(R.id.priority);
viewHolder.done = (CheckBox) view.findViewById(R.id.check);
viewHolder.b=(LinearLayout)view.findViewById(R.id.task_layout);
viewHolder.showingByList = (TextView) view.findViewById(R.id.tasklist);
view.setTag(viewHolder);
}
else
viewHolder = (ViewHolder)view.getTag();
innewView=false;
final String task = cursor.getString(taskIndex);
String TaskNote = cursor.getString(NoteIndex);
int prior= cursor.getInt(priorIndex);
int taskDone= cursor.getInt(doneIndex);
final long id=cursor.getLong(rowIndex);
int uniqueyindex = cursor.getColumnIndex(taskColumns.UNIQUEY);
if(TaskNote==null)
{
viewHolder.note.setVisibility(View.GONE);
viewHolder.note_img.setVisibility(View.GONE);
}
else
{
if(TaskNote.length()<1)
{
viewHolder.note.setVisibility(View.GONE);
viewHolder.note_img.setVisibility(View.GONE);
}
else{
viewHolder.note.setVisibility(View.VISIBLE);
viewHolder.note_img.setVisibility(View.VISIBLE);
}
}
if(showbyList){
String taskList = cursor.getString(taskListIndex);
if(taskList==null)
{
ContentValues valuey=new ContentValues();
valuey.put(taskColumns.LIST_ID, "0");
valuey.put(taskColumns.LIST, "personal");
Uri mUry = ContentUris.withAppendedId(uri,id);
getContentResolver().update(mUry, valuey,null,null);
taskList="personal";
}
// viewHolder.showingByList.setTypeface(tf);
viewHolder.b.setVisibility(View.VISIBLE);
viewHolder.space=(TextView)view.findViewById(R.id.space);
viewHolder.space.setVisibility(View.VISIBLE);
if(cursor.moveToPrevious()){
int comparedResult= taskList.compareTo(cursor.getString(taskListIndex));
if(comparedResult==0)
{
viewHolder.showingByList.setVisibility(View.GONE);
}
else{
viewHolder.showingByList.setVisibility(View.VISIBLE);
viewHolder.showingByList.setText(taskList.toUpperCase());
}
}
else{
viewHolder.showingByList.setVisibility(View.VISIBLE);
viewHolder.showingByList.setText(taskList.toUpperCase());
}
cursor.moveToNext();
viewHolder.showingByList.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0) {
}
});
}
viewHolder.b.setBackgroundResource(R.drawable.my_drawable1);
if(toModify.contains((int)id))
viewHolder.b.setBackgroundResource(R.color.light_blue);
viewHolder.task.setText(task);
if(TaskNote!=null)
viewHolder.note.setText(TaskNote);
if(taskDone==1){
viewHolder.done.setChecked(true);
viewHolder.task.setTextColor(getResources().getColor(R.color.smooth));
viewHolder.note.setTextColor(getResources().getColor(R.color.smooth));
viewHolder.note_img.setImageResource(R.drawable.note_done2);
viewHolder.priority.setBackgroundResource(R.drawable.priornone);
}
else{
viewHolder.done.setChecked(false);
viewHolder.task.setTextColor(getResources().getColor(R.color.darkthemed_text));
viewHolder.note.setTextColor(getResources().getColor(R.color.darkthemed_note));
viewHolder.note_img.setImageResource(R.drawable.note2);
if(prior==1){
viewHolder.priority.setBackgroundResource(R.drawable.priornone);
}
else{
viewHolder.priority.setBackgroundResource(R.color.priority_2);
}
}
}
}
各 'instantiateItem()'でディスクI/O( 'getSharedPreferences()')をやめ、 'StrictMode'とTraceviewを使ってどこが間違っているのか調べます。 – CommonsWare
私は** Commonsware **の提案に従って、TraceView中にアダプタがレイアウトを膨らませるのに時間がかかりすぎていることが分かりました。私はlistVIew行に対して3つの線形レイアウトを使用していたので、Parentlayoutを相対レイアウトに変更し、子ビューを配列して目的の出力を得ました。それは私のために働いた、今ビューパージャーはスムーズです。ありがとうCommonsware。 – kay