ublic class SectionsList extends LinearLayout implements OnOffChangeListener,OnClickListener,MessageListener{
private Context mContext;
private Dialog dialog;
private List<TextView> tList = new ArrayList<TextView>();
private List<EditValueButton> editList = new ArrayList<EditValueButton>();
private List<OnOffButton> onOffList = new ArrayList<OnOffButton>();
private List<String> sectionNames = NewsReader.getInstance().getSectionNamesListWithFunStories();
private final int ChangeBannerDeliveryBetweenTimeDialog_ID = 1;
private final int ChangeBannerDeliveryBetweenDateTimeDialog_ID = 2;
private Handler mHandler;
private EditValueButton editButton;
private long startTime;
private View setView;
private OnOffButton Id;
private Boolean sectionOn = false;
private Boolean setOff;
private Boolean checkSection = false;
private String activeSection;
private OnOffButton onOff;
private boolean cancel;
private TextView sectionName;
private TableLayout table;
private Resources resources;
private int textNormalColor;
private HashMap<String, Time> getSectiontime;
private HashMap<String, Time> hm = new HashMap<String, Time>();
@Override
public boolean handleMessage(Message msg) {
boolean ret;
Bundle bundle = msg.getData();
switch ( msg.what)
{
case Constants.message_SetBannerTime:
startTime = bundle.getLong(Constants.KEY_ARG_1);
setDisplayDuringLabel(startTime, setView);
ret = true;
break;
case Constants.message_setOff:
cancel = bundle.getBoolean(Constants.KEY_ARG_1);
if(cancel){
setOff();
ret = true;
break;
}
default:
{
ret = false;
break;
}
}
return ret;
}
public SectionsList(Context context) {
super(context);
mContext = context;
init(context, null);
}
public SectionsList(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
//new CustomTask().execute();
Log.d("secnames", "section names" + sectionNames);
getSectiontime = PersistedScheduledBannerStore.getInstance().getScheduledBanners();
resources = context.getResources();
textNormalColor = resources.getColor(R.color.app_button_normal_text_color);
if(getSectiontime != null){hm = getSectiontime;}
LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.sectiontable, this, true);
table = (TableLayout) findViewById(R.id.mainTable);
for(int i =0; i< sectionNames.size();i++){
TableRow tr = new TableRow(context);
View line = new View(context);
line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 1));
line.setBackgroundColor(textNormalColor);
line.setPadding(0, 10, 0, 10);
layoutInflater.inflate(R.layout.sectiontablerow, tr);
table.addView(tr, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));
table.addView(line);
setIds(tr);
setTagstoViews(i);
addViewstoList();
setListeners();
checkIfSectionIsOn(i);
tList.get(i).setText("sai ram");
}
}
private void loopThroughViews(Context context, LayoutInflater layoutInflater) {
}
private void checkIfSectionIsOn(int i) {
if(getSectiontime.containsKey(sectionNames.get(i))){
String key = sectionNames.get(i);
Time value = getSectiontime.get(key);
editList.get(i).setText(DateFormat.format("h:mm a", value).toString());
onOff.setOn(true);
}else{
editList.get(i).setText("-:-");
}
}
public void onOffChanged(OnOffButton button, boolean isOn) {
setView = button;
if(isOn){
sectionOn = true;
}
else if (!isOn){
sectionOn = false;
makeSectionActive(button);
hm.remove(activeSection);
getSectiontime.remove(activeSection);
}
}
protected Dialog onCreateDialog(int id) {
switch (id) {
case ChangeBannerDeliveryBetweenTimeDialog_ID:
{
long curStartTime = 0;
dialog = new ChangeBannerTimeDialog(getContext(), curStartTime, mHandler,0);
break;
}
case ChangeBannerDeliveryBetweenDateTimeDialog_ID:
{
long curStartTime = 0;
dialog = new ChangeBannerdateTimeDialog(getContext(), curStartTime, mHandler, 0);
break;
}
default:
dialog = null;
}
return dialog;
}
private void setDisplayDuringLabel(long startTime, View v){
changeTimeText(v, DateFormat.format("h:mm a", startTime).toString());
Time time = new Time(startTime);
if(sectionOn){
hm.put(activeSection, time);
}
}
@Override
public void onClick(View v) {
setView = v;
if(v.getId() == R.id.sectionOnOff){
if(sectionOn){
TextView tt = tList.get(Integer.parseInt(v.getTag().toString()));
String secName = tt.getText().toString();
showDateTimeDialogIfHoroscopes(secName);
setOff = true;
Id = onOffList.get(Integer.parseInt(v.getTag().toString()));
Id.setOn(true);
makeSectionActive(v);
}
}
else if(v.getId() == R.id.editTime){
setView = v;
Id = onOffList.get(Integer.parseInt(v.getTag().toString()));
if(Id.isOn()){
TextView tt = tList.get(Integer.parseInt(v.getTag().toString()));
String secName = tt.getText().toString();
showDateTimeDialogIfHoroscopes(secName);
setOff = false;
Id.setOn(true);
makeSectionActive(v);
}
}
}
private void showDateTimeDialogIfHoroscopes(String secName) {
if(secName.equals("Horoscopes")){
onCreateDialog(ChangeBannerDeliveryBetweenDateTimeDialog_ID).show();
}else{
onCreateDialog(ChangeBannerDeliveryBetweenTimeDialog_ID).show();
}
}
private void setOff() {
if(setOff){
Id.setOn(false);
}
else if(!setOff){
Id.setOn(true);
}
}
private void setIds(TableRow tr){
onOff = (OnOffButton) tr.findViewById(R.id.sectionOnOff);
editButton = (EditValueButton) tr.findViewById(R.id.editTime);
sectionName = (TextView) tr.findViewById(R.id.sectionName);
}
private void setTagstoViews(int i){
onOff.setTag(""+i);
editButton.setTag(""+i);
}
private void setListeners(){
editButton.setOnClickListener(this);
onOff.setOnOffChangeListener(this);
onOff.setOnClickListener(this);
}
public HashMap<String, Time> getBannerSectionwithTime(){
return hm;
}
private void addViewstoList(){
onOffList.add(onOff);
editList.add(editButton);
tList.add(sectionName);
}
private void makeSectionActive(View v){
TextView tt = tList.get(Integer.parseInt(v.getTag().toString()));
activeSection = tt.getText().toString();
}
private void changeTimeText(View v, String text){
EditValueButton tt = editList.get(Integer.parseInt(v.getTag().toString()));
tt.setText(text);
}
public boolean checkSectionOn(){
return checkSection;
}
private class CustomTask extends AsyncTask<String, Void, Boolean>{
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog=ProgressDialog.show(getContext(), "", "Loading...");
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
dialog.dismiss();
}
@Override
protected Boolean doInBackground(String... params) {
return null;
}
}
}
我想使用Async任务将所有Ui放入postexecute并在doinbackground中循环? 在循环中我有我的表行占用5秒到8秒加载所以我们可以以某种方式在后台添加循环吗?任何帮助,将不胜感激。请提供代码示例以便更好地理解
答案 0 :(得分:0)
首先定义您耗时的任务。如果您希望将表创建为asyncTask,则提示如何执行此操作。首先,您需要创建整个表格关闭屏幕,然后将其添加到您的布局
private TableLayout table;
private void init(){
new CustomTask().execute();
}
private class CustomTask extends AsyncTask<String, Void, Boolean>{
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog=ProgressDialog.show(getContext(), "", "Loading...");
}
@Override
protected Boolean doInBackground(String... params) {
// Here is the part where you create your table and do extensive work
// For example
for(int i =0; i< sectionNames.size();i++){
TableRow tr = new TableRow(context);
View line = new View(context);
line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 1));
line.setBackgroundColor(textNormalColor);
line.setPadding(0, 10, 0, 10);
layoutInflater.inflate(R.layout.sectiontablerow, tr);
table.addView(tr, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));
table.addView(line);
setIds(tr);
setTagstoViews(i);
addViewstoList();
setListeners();
checkIfSectionIsOn(i);
tList.get(i).setText("sai ram");
}
return null;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
//And now add your tableLayout in your Layout
layout.addView(tableLayout);
// Adjust layout params per need
dialog.dismiss();
}
}
根据您的需要调整所有这些。
希望这有助于并享受您的工作。