2013-06-01 58 views
1

我知道我們在標準Android應用程序中使用「convertView」變量檢查來處理「Recycler」。是否有任何方式來處理它的內部構件開發,因爲,RemoteAdaptersFactory有一個方法getViewAt &這種方法沒有像convertView這樣的參數。只是一個整數「位置」。注:我使用layout:match_parentappwidget 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() { 

    } 


} 
} 

提供商代碼:

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

經過幾次試驗和谷歌搜索一個月後,今天我找到了解決方案。在listview中使用圖像視圖時,應該在每個getViewAt調用中啓動每個imageview。我已經在每種情況下調整了imageview選擇,但忘記了初始化。在getViewAt我分配了一個沒有內容的透明圖像。問題解決了。