gpt4 book ai didi

java - 有没有比 findViewById() 更好的方法将 XML 元素与 Android 中的 java 类链接起来

转载 作者:行者123 更新时间:2023-12-01 13:47:31 27 4
gpt4 key购买 nike

虽然我希望尽可能以编程方式制作所有内容,并将 XML 留空,但在我工作的地方这是不可能的(设计人员不会使用原始程序代码......)

因此,就这一点而言,几乎我使用或构建的每个 Activity 都在开头的某个位置包含一大块 findViewById 。

如果我必须从头开始创建它,并且现在允许我以编程方式创建按钮数组并将其添加到布局中,这会特别痛苦...值得庆幸的是,如果它达到 10 个以上元素,他们会让我这样做而且它们都是同一类型。

有办法避免这种情况吗?或者有一种方法可以让它自动将其转换为我分配给它的内容?所以我不需要输入 Button mButton = (Button) findview...

如果有某种方法可以自动生成按钮的 java 实例,以及在给定布局的情况下从 XML 中生成哪些内容,那就太好了(特别是如果名称很好并且可以自动完成)。

最佳答案

尝试使用Android annotations
AndroidAnnotations 是一个开源框架,可加速 Android 开发。它负责管理管道,让您专注于真正重要的事情。通过简化代码,可以方便维护。
下面是一个简单的示例,说明您的代码如何大幅缩减并变得更容易理解:

之前 Android 注解


public class BookmarksToClipboardActivity extends Activity {

BookmarkAdapter adapter;

ListView bookmarkList;

EditText search;

BookmarkApplication application;

Animation fadeIn;

ClipboardManager clipboardManager;

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

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN);

setContentView(R.layout.bookmarks);

bookmarkList = (ListView) findViewById(R.id.bookmarkList);
search = (EditText) findViewById(R.id.search);
application = (BookmarkApplication) getApplication();
fadeIn = AnimationUtils.loadAnimation(this, anim.fade_in);
clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1);
updateBookmarksButton1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
updateBookmarksClicked();
}
});

View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2);
updateBookmarksButton2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
updateBookmarksClicked();
}
});

bookmarkList.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView p, View v, int pos, long id) {
Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem(pos);
bookmarkListItemClicked(selectedBookmark);
}
});

initBookmarkList();
}

void initBookmarkList() {
adapter = new BookmarkAdapter(this);
bookmarkList.setAdapter(adapter);
}

void updateBookmarksClicked() {
UpdateBookmarksTask task = new UpdateBookmarksTask();

task.execute(search.getText().toString(), application.getUserId());
}

private static final String BOOKMARK_URL = //
"http://www.bookmarks.com/bookmarks/{userId}?search={search}";


class UpdateBookmarksTask extends AsyncTask {

@Override
protected Bookmarks doInBackground(String... params) {
String searchString = params[0];
String userId = params[1];

RestTemplate client = new RestTemplate();
HashMap args = new HashMap();
args.put("search", searchString);
args.put("userId", userId);
HttpHeaders httpHeaders = new HttpHeaders();
HttpEntity request = new HttpEntity(httpHeaders);
ResponseEntity response = client.exchange( //
BOOKMARK_URL, HttpMethod.GET, request, Bookmarks.class, args);
Bookmarks bookmarks = response.getBody();

return bookmarks;
}

@Override
protected void onPostExecute(Bookmarks result) {
adapter.updateBookmarks(result);
bookmarkList.startAnimation(fadeIn);
}

}

void bookmarkListItemClicked(Bookmark selectedBookmark) {
clipboardManager.setText(selectedBookmark.getUrl());
}

}

之后:


@NoTitle
@Fullscreen
@EActivity(R.layout.bookmarks)
public class BookmarksToClipboardActivity extends Activity {

BookmarkAdapter adapter;

@ViewById
ListView bookmarkList;

@ViewById
EditText search;

@App
BookmarkApplication application;

@RestService
BookmarkClient restClient;

@AnimationRes
Animation fadeIn;

@SystemService
ClipboardManager clipboardManager;

@AfterViews
void initBookmarkList() {
adapter = new BookmarkAdapter(this);
bookmarkList.setAdapter(adapter);
}

@Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2})
void updateBookmarksClicked() {
searchAsync(search.getText().toString(), application.getUserId());
}

@Background
void searchAsync(String searchString, String userId) {
Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);
updateBookmarks(bookmarks);
}

@UiThread
void updateBookmarks(Bookmarks bookmarks) {
adapter.updateBookmarks(bookmarks);
bookmarkList.startAnimation(fadeIn);
}

@ItemClick
void bookmarkListItemClicked(Bookmark selectedBookmark) {
clipboardManager.setText(selectedBookmark.getUrl());
}

}

关于java - 有没有比 findViewById() 更好的方法将 XML 元素与 Android 中的 java 类链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20252212/

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