gpt4 book ai didi

Android 小部件使用 putextra 开始新 Activity

转载 作者:行者123 更新时间:2023-11-30 03:05:07 33 4
gpt4 key购买 nike

我正在使用 JSON。我编写了可以加载 JSON(图像和文本)并在 ListView 中显示数据的代码。(在 ListView OnItemClickListener 中我启动了新的 Activity)。

我还写了一个 appwidget(stackview 小部件),我可以在 stackview 小部件中显示 JSON 内容,我想要这样,例如,如果我单击第 5 个项目,它会启动一个新 Activity 并允许用户阅读第 5 条新闻。我可以在点击小部件时开始新 Activity ,但是如何根据项目位置开始新的结果 Activity ?

这是我的代码:

public class MainActivity extends Activity {
public String URL = "*********************";

public static String KEY_title = "title";
public static String KEY_description = "description";
public static String KEY_image = "image";
public static String KEY_journal = "journal";
public static String KEY_JournalID = "JournalID";
public static String KEY_pubDate = "pubDate";
public static String KEY_statID = "statID";
public JSONArray jsonarray;
public ListView list;
public JSONParser jsonparser;
static BRIgeAdapter adapter;

public static ArrayList<HashMap<String, String>> itemList;

public static String dateTime;
private ArrayList<Content> contents = new ArrayList<Content>();

public TransparentProgressDialog pd;
HashMap<String, String> map;

private int screenSize;

public LoadDataAllChanelsToServer loadData;

public TextView journal, tittle, description, smalllink, DateTime,
smallstatID;

@SuppressLint("CutPasteId")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
screenSize = getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK;

itemList = new ArrayList<HashMap<String, String>>();
list = (ListView) findViewById(R.id.listView1);

adapter = new BRIgeAdapter(MainActivity.this, itemList, screenSize);

Thread.setDefaultUncaughtExceptionHandler(new UnCaughtException(this,
this));
loadData = new LoadDataAllChanelsToServer();

pd = new TransparentProgressDialog(this, R.drawable.loader);


list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
journal = (TextView) view.findViewById(R.id.smalljournal);

tittle = (TextView) view.findViewById(R.id.smalltitle);
description = (TextView) view
.findViewById(R.id.smallDescription);
smalllink = (TextView) view.findViewById(R.id.smalllink);
DateTime = (TextView) view.findViewById(R.id.smallDateTime);
smallstatID = (TextView) view.findViewById(R.id.smallstatID);
String Stringjournal = journal.getText().toString();
String Stringtittle = tittle.getText().toString();
String Stringdescription = description.getText().toString();
String Stringlink = smalllink.getText().toString();
String StringdateTime = DateTime.getText().toString();
String StringstatID = smallstatID.getText().toString();

Intent in = new Intent(MainActivity.this, Result.class);
in.putExtra("KEY_journal", Stringjournal);
in.putExtra("KEY_title", Stringtittle);
in.putExtra("KEY_description", Stringdescription);
in.putExtra("KEY_link", Stringlink);
in.putExtra("KEY_pubDate", StringdateTime);
in.putExtra("KEY_statID", StringstatID);

String url = itemList.get(position).get(MainActivity.KEY_image);

if (url.endsWith("-c.jpg"))
url = url.replace("-c.jpg", ".jpg");
in.putExtra("Bitmap", url);

in.putExtra("Bitmap", url);

startActivity(in);
overridePendingTransition(R.anim.trans_left_in,
R.anim.trans_left_out);

}
});

loadData.execute();

}

private class LoadDataAllChanelsToServer extends
AsyncTask<String, Integer, String> {

@Override
protected void onPreExecute() {

pd.show();
}

@Override
protected String doInBackground(String... urls) {

jsonparser = new JSONParser();

JSONObject jsonobject = jsonparser.getJSONfromURL(URL);
try {

jsonarray = jsonobject.getJSONArray("data");

for (int i = 0; i < jsonarray.length(); i++) {
jsonobject = jsonarray.getJSONObject(i);

map = new HashMap<String, String>();

map.put("journal", jsonobject.getString(KEY_journal));
map.put("image", jsonobject.getString(KEY_image));
map.put("title", jsonobject.getString(KEY_title));
map.put("description",
jsonobject.getString(KEY_description));
map.put("JournalID", jsonobject.getString(KEY_JournalID));
map.put("pubDate", jsonobject.getString(KEY_pubDate));
map.put("statID", jsonobject.getString(KEY_statID));

Content cont = new Content(jsonobject.getString("journal"),
jsonobject.getString("image"),
jsonobject.getString("title"),
jsonobject.getString("pubDate"),
jsonobject.getString("description"),
jsonobject.getString("JournalID"),
jsonobject.getString("statID"));
contents.add(cont);

itemList.add(map);
dateTime = itemList.get(itemList.size() - 1).get(
KEY_pubDate);
}

} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}

return itemList.toString();

}

@Override
protected void onPostExecute(String result) {
try {
if (pd != null) {
pd.dismiss();

}
} catch (Exception e) {

}

try {
adapter = new BRIgeAdapter(MainActivity.this, itemList,
screenSize);
list.setAdapter(adapter);

} catch (NullPointerException e) {
e.printStackTrace();
}

}

}

}

Result.java代码

public class Result extends Activity {

public Drawable mDrawable;
ImageLoader loader;;
public MainActivity main;

Bundle parems;

public TextView tittle, desc, statID, journal, DateTime;

public String My_tittle, My_desc, My_link, My_statID, StringmBitmap,
My_journal, My_dateTime, position;
public ImageView image;
public ScrollView scrollview;

AlertDialogManager alert = new AlertDialogManager();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_result);

statID = (TextView) findViewById(R.id.statID);
journal = (TextView) findViewById(R.id.DateTimeDetails);
DateTime = (TextView) findViewById(R.id.Tabula);
scrollview = (ScrollView) findViewById(R.id.scrollviewMenu);

loader = new ImageLoader(this);
tittle = (TextView) findViewById(R.id.titleDetails);
desc = (TextView) findViewById(R.id.descriptionDetails);

image = (ImageView) findViewById(R.id.imageDetails);

Intent intent = getIntent();

My_tittle = intent.getStringExtra("KEY_title");
My_desc = intent.getStringExtra("KEY_description");
My_link = intent.getStringExtra("KEY_link");
My_statID = intent.getStringExtra("KEY_statID");
My_journal = intent.getStringExtra("KEY_journal");
My_dateTime = intent.getStringExtra("KEY_pubDate");
position = intent.getStringExtra("position");

StringmBitmap = intent.getStringExtra("Bitmap");



loader.DisplayImage(StringmBitmap, image);

Log.d("url", StringmBitmap);
tittle.setText(My_tittle);
DateTime.setText(My_dateTime);

My_desc = My_desc.trim();
My_desc = My_desc.replaceAll("\n", "\n\n");

Log.i("JSOOOOOOOOOOOOOOONNNNNNN", My_desc);
desc.setText(My_desc);

statID.setText(My_statID);
journal.setText(My_journal);

}

}

BaseAdapter java代码

public class BRIgeAdapter extends BaseAdapter {

Context mContext;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater = null;
public ImageLoader imageLoader;

private int screenSize;

public BRIgeAdapter(Context context, ArrayList<HashMap<String, String>> d,
int screenSize) {
this.mContext = context;
this.data = d;
this.screenSize = screenSize;
inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(context.getApplicationContext());
}

public int getCount() {
return data.size();
}

public Object getItem(int position) {
return position;
}

public long getItemId(int position) {
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.list_row, null);

TextView journal = (TextView) vi.findViewById(R.id.smalljournal);
TextView title = (TextView) vi.findViewById(R.id.smalltitle);
TextView description = (TextView) vi
.findViewById(R.id.smallDescription);
ImageView thumb_image = (ImageView) vi.findViewById(R.id.smallthumb);
TextView statId = (TextView) vi.findViewById(R.id.smallstatID);
TextView DateTime = (TextView) vi.findViewById(R.id.smallDateTime);
HashMap<String, String> itemList = new HashMap<String, String>();
itemList = data.get(position);

journal.setText(itemList.get(MainActivity.KEY_journal));
statId.setText(itemList.get(MainActivity.KEY_statID));


String titleString = itemList.get(MainActivity.KEY_title);

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

String DateTimeTxt = itemList.get(MainActivity.KEY_pubDate).replace(
"T", " ");

try {
Date _d = df.parse(DateTimeTxt);
SimpleDateFormat new_df = new SimpleDateFormat("dd.MM.yyyy");
String _s = new_df.format(_d);
DateTime.setText(_s);
} catch (ParseException e) {

e.printStackTrace();
}

if (screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL)
description.setVisibility(View.INVISIBLE);

else
description.setVisibility(View.VISIBLE);
title.setText(titleString);

description.setText(itemList.get(MainActivity.KEY_description));


String url = itemList.get(MainActivity.KEY_image);

imageLoader.DisplayImage(url, thumb_image);

return vi;
}

}

AppWidgetProvider java代码

public class BriGeWidgetProvider extends AppWidgetProvider {
public static final String TOAST_ACTION = "com.example.android.stackwidget.TOAST_ACTION";
public static final String EXTRA_ITEM = "com.example.android.stackwidget.EXTRA_ITEM";
private RemoteViews views;
private Intent intent;

@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
}

@Override
public void onDisabled(Context context) {
super.onDisabled(context);
}

@Override
public void onEnabled(Context context) {
super.onEnabled(context);
}

@Override
public void onReceive(Context context, Intent intent) {
AppWidgetManager mgr = AppWidgetManager.getInstance(context);
if (intent.getAction().equals(TOAST_ACTION)) {
int appWidgetId = intent.getIntExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);

int viewIndex = intent.getIntExtra(EXTRA_ITEM, 0);
Toast.makeText(context, "Touched view " + viewIndex,
Toast.LENGTH_SHORT).show();

context.startActivity(new Intent(context, MainActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

}
super.onReceive(context, intent);
}

@SuppressWarnings("deprecation")
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {

final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];

intent = new Intent(context, BriGeRemoteViewsService.class);

intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);

views = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
views.setRemoteAdapter(appWidgetId, R.id.stackWidgetView, intent);

views.setEmptyView(R.id.stackWidgetView, R.id.stackWidgetEmptyView);

Intent templateIntent = new Intent(context,
BriGeWidgetProvider.class);
templateIntent.setAction(BriGeWidgetProvider.TOAST_ACTION);
templateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent templatePendingIntent = PendingIntent.getBroadcast(
context, 0, templateIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
views.setPendingIntentTemplate(R.id.stackWidgetView,
templatePendingIntent);

appWidgetManager.updateAppWidget(appWidgetId, views);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}

RemoteViewsService java代码

public class BriGeRemoteViewsService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {

return new BriGeRemoteViewsFactory(this.getApplicationContext(), intent);
}

class BriGeRemoteViewsFactory implements RemoteViewsFactory {

private ArrayList<ItemI> itemList;
private Context context;
private int appWidgetId;

public BriGeRemoteViewsFactory(Context context, Intent intent) {
this.context = context;
this.appWidgetId = intent.getIntExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}

@Override
public void onCreate() {
itemList = getData();
}

@Override
public void onDataSetChanged() {
itemList = getData();
}

@Override
public void onDestroy() {
itemList.clear();
}

@Override
public int getCount() {
if (itemList != null)
return itemList.size();
else
return 0;
}

@Override
public RemoteViews getViewAt(int position) {
ItemI item = itemList.get(position);

RemoteViews rv = new RemoteViews(context.getPackageName(),
R.layout.item_view);

rv.setTextViewText(R.id.title, item.getTitle());
rv.setImageViewBitmap(R.id.img, getImageBitmap(item.getImage()));


Bundle extras = new Bundle();
extras.putInt(BriGeWidgetProvider.EXTRA_ITEM, position);
Intent fillIntent = new Intent();
fillIntent.putExtras(extras);

rv.setOnClickFillInIntent(R.id.title, fillIntent);
rv.setOnClickFillInIntent(R.id.img, fillIntent);

return rv;
}

private Bitmap getImageBitmap(String url) {
Bitmap bm = null;
try {
URL aURL = new URL(url);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
} catch (IOException e) {
}
return bm;
}

@Override
public RemoteViews getLoadingView() {
return null;
}

@Override
public int getViewTypeCount() {
return 1;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public boolean hasStableIds() {
return true;
}

private ArrayList<ItemI> getData() {
JsonParser jp = new JsonParser(context);
return jp.getDataAsList();
}
}
}

最佳答案

你可以替换这个

rv.setOnClickFillInIntent(R.id.title, fillIntent);
rv.setOnClickFillInIntent(R.id.img, fillIntent);

通过将 id 分配给堆栈项目布局的根,然后执行此操作

rv.setOnClickFillInIntent(R.id.item_root, fillIntent);

在您的 RemoteViewsFactory 中:

Bundle extras = new Bundle();
extras.putInt(BriGeWidgetProvider.EXTRA_ITEM, position);
extras.putString("title", item.getTitle());
// repeat the operations for all the fields of item you need in you result Activity
Intent fillIntent = new Intent();
fillIntent.putExtras(extras);

在 AppWidgetProvider 的 onReceive 中:

String title = intent.getString("title");
// repeat the operations for all the fields of item you need in you result Activity

然后像这样为 Activity 构建您的 Intent 而不是创建一个新的空 Intent :

Intent openItemIntent = new Intent(context, Result.class);
openItemIntent.putExtra("title", item.getTitle());
// repeat the operations for all the fields of item you need in you result Activity
openItemIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(openItemIntent);

当然,您可以通过让您的 ItemI 类实现 Parcelable 来简化这一点,而不是单独传递所有字符串。

关于Android 小部件使用 putextra 开始新 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21929318/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com