2013-06-01 2 views
1

표준 Android 애플리케이션에서 "convertView"변수 검사로 "Recycler"를 처리한다는 것을 알고 있습니다. RemoteAdaptersFactory 메서드가 getViewAt & 인이 도구는 convertView과 같은 매개 변수가 없기 때문에 위젯 개발 내부에서이를 처리 할 수있는 방법이 있습니까? 그냥 정수 "위치". 참고 :appwidget listview 중복 값

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/xxxxx" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ImageView 
    android:id="@+id/yyyy" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="fitXY" /> 

<TextView 
    android:id="@+id/zzzzzzz" 
    android:layout_width="wrap_content" 
    android:layout_height="40dp" 
    android:text="Aylik aktiviteler" 
    android:textColor="#000000" /> 

<RelativeLayout 
    android:id="@+id/bbbbb" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/aaaaaa" > 

    <ListView 
     android:id="@+id/cccccc" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingTop="20dp" 
     android:scrollingCache="false" > 

    </ListView> 

    <TextView 
     android:id="@+id/dddddd" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" 
     android:visibility="gone" /> 

</RelativeLayout> 

<Button 
    android:id="@+id/aaaaa" 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:text="+" /> 

</RelativeLayout> 

서비스 코드 :

package com.example.xxxxx; 

import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import android.appwidget.AppWidgetManager; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.RemoteViews; 
import android.widget.RemoteViewsService; 

public class DorduncuWidgetService extends RemoteViewsService { 

@Override 
public RemoteViewsFactory onGetViewFactory(Intent intent) { 
    return new StackRemoteViewsFactory(this.getApplicationContext(), intent); 
} 


class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { 

    private Context mContext; 
    private int mAppWidgetId; 


    private ActivitiesDataSource datasource; 




    public StackRemoteViewsFactory(Context context, Intent intent) { 

     mContext = context; 
     mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 


     datasource = new ActivitiesDataSource(context); 
     datasource.open(); 

     //getDBtoMyList working here 

     datasource.close(); 

    } 

    private int getResimID(int position) { 

     if(position == 1) 
      return R.drawable.resim1; 
     if(position == 2) 
      return R.drawable.resim2; 
     if(position == 3) 
      return R.drawable.resim3; 

    } 

    @Override 
    public int getCount() { 
     return 40; 
    } 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 
    @Override 
    public RemoteViews getLoadingView() { 
     return null; 
    } 
    @Override 
    public RemoteViews getViewAt(int position) { 

     RemoteViews satir = new RemoteViews(mContext.getPackageName(), R.layout.widgetxx); 

     satir.setTextViewText(R.id.ggggg, "" + gunler.get(position).substring(0, 2)); 


//If bla bla, set image this 
     satir.setImageViewResource(R.id.imagexxxx, getResimID(position); 
//If bla2 bla2i set image that 
     satir.setImageViewResource(R.id.imagexxxx, getResimID(position); 


     return satir; 

    } 
    @Override 
    public int getViewTypeCount() { 
     return 1; 
    } 
    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 
    @Override 
    public void onCreate() { 

    } 
    @Override 
    public void onDataSetChanged() { 

     Calendar cal = Calendar.getInstance(); 
     cal.setTime(new Date()); 

     harita.clear(); 
     gunler.clear(); 

     datasource = new ActivitiesDataSource(mContext); 
     datasource.open(); 

     //getDBtoMyList working here 

     datasource.close(); 

    } 
    @Override 
    public void onDestroy() { 

    } 


} 
} 

제공자 코드 : 나는 layout:match_parent

내 코드를 사용하고

package com.example.xxxxx; 

import android.app.PendingIntent; 
import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.widget.RemoteViews; 

public class DorduncuWidgetProvider extends AppWidgetProvider { 



@Override 
public void onReceive(Context ctx, Intent intent) { 

    final String action = intent.getAction(); 

    super.onReceive(ctx, intent); 

} 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    // Update each of the widgets with the remote adapter 
    for (int i = 0; i < appWidgetIds.length; ++i) { 
     RemoteViews layout = buildLayout(context, appWidgetIds[i]); 
     appWidgetManager.updateAppWidget(appWidgetIds[i], layout); 
    } 

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.dorduncuwidget); 
    Intent configIntent = new Intent(context, AddRecordActivity.class); 
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0); 
    remoteViews.setOnClickPendingIntent(R.id.btnaylikekle, configPendingIntent); 
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 

    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 

private RemoteViews buildLayout(Context context, int appWidgetId) { 

    RemoteViews rv = null; 
    final Intent intent = new Intent(context, DorduncuWidgetService.class); 
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
    rv = new RemoteViews(context.getPackageName(), R.layout.dorduncuwidget); 
    rv.setRemoteAdapter(appWidgetId, R.id.cccccc, intent); 

    rv.setEmptyView(R.id.cccccc, R.id.txtgone); 

    return rv; 
} 

} 

내 행 레이아웃 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="60dp" 
android:orientation="horizontal" > 

<TextView 
    android:id="@+id/ggggg" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingRight="10dp" 
    android:text=" * " 
    android:textColor="#000000" 
    android:textSize="20sp" /> 

<LinearLayout 
    android:id="@+id/vvvvvv" 
    android:layout_width="match_parent" 
    android:layout_height="52dp" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/imagexxxx" 
     android:layout_width="50dp" 
     android:layout_height="50dp" /> 

    <ImageView 
     android:id="@+id/imagexxxx22" 
     android:layout_width="50dp" 
     android:layout_height="50dp" /> 

</LinearLayout> 

</LinearLayout> 
+0

Java 코드도 추가하십시오. –

답변

1

Google에서 몇 번의 시련과 한 달간 검색 한 결과 오늘 해결책을 찾았습니다. listview에서 imageviews를 사용할 때 각 getViewAt 호출시 모든 이미지 뷰를 초기화해야합니다. 각 경우에 이미지 뷰 선택을 조정했지만 초기화를 잊어 버렸습니다. getViewAt에서 내용이없는 투명한 이미지를 할당했습니다. 문제 해결됨.