我在布局中有100个按钮,所有这些按钮都有OnClick()
方法。
如果我使用switch
,我需要为所有100个按钮执行case R.id.button1, ..., case R.id.button100
。如何缩短此代码?
public void webClick(View v)
{
switch(v.getId())
{
case R.id.button1:
Intent intent = new Intent(this, Webview.class);
intent.putExtra("weblink","file:///android_asset/chapter/chapter1.html");
startActivity(intent);
break;
case R.id.button2:
Intent intent2 = new Intent(this, Webview.class);
intent2.putExtra("weblink","file:///android_asset/chapter/chapter2.html");
startActivity(intent2);
break;
// ...
case R.id.button100:
Intent intent100 = new Intent(this, Webview.class);
intent100.putExtra("weblink","file:///android_asset/chapter/chapter100.html");
startActivity(intent100);
break;
}
}
答案 0 :(得分:5)
如果网址直接取决于ID,请尝试以下操作:
public void webClick(View v)
{
Intent intent = new Intent(this, Webview.class);
intent.putExtra("weblink","file:///android_asset/chapter/chapter" + v.getId() + ".html");
startActivity(intent);
}
EDITED
如果您的URL不直接依赖于ID,请尝试使用URLS映射按钮ID,如下所示:
Map<Integer, String> urls = new HashMap();
urls.put(R.id.button1, "file:///android_asset/chapter/chapter100.html");
// ... 1 to 100 ...
并修改上面的代码:
public void webClick(View v)
{
Intent intent = new Intent(this, Webview.class);
intent.putExtra("weblink", urls.get(v.getId()));
startActivity(intent);
}
编辑#2
如果在你的按钮的标签中你已经有了URL,那么sugestion(不是我的,但由@pad制作)将用它来这样计算URL:
public void webClick(View v)
{
Intent intent = new Intent(this, Webview.class);
intent.putExtra("weblink", "file:///android_asset/chapter/chapter" + v.getText().replaceAll("Chapter ","") + ".html"); // Assuming your text is like "Chapter 50"
startActivity(intent);
}
答案 1 :(得分:2)
对于您的案例中的更多按钮,在循环中动态创建按钮并分配onclick事件,例如..
在xml文件中创建一个LinearLayout
。
现在将所有按钮添加到LinearLayout中,如..
String[] urls={url1,url2.....url100}; // here write your all URLs
Button button[]= new Button[100];
LinearLayout mainlinear=(LinearLayout) findViewById(R.id.main_layer);
for (int i = 0; i < 100; i++) {
button[i] = new Button(this);
button[i].setText(i);
button[i].setTag(i+":"+URL); // URL = What you need to pass when button is click
button[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TextView selected = (TextView) v;
String tag = selected.getTag().toString();
//Here you need to write your code when button is pressed.
Intent intent = new Intent(this, Webview.class);
intent2.putExtra("weblink",urls[i]);
startActivity(intent2);
}
}
mainlinear.addView(button[i]);
答案 2 :(得分:0)
我认为这应该有效:
public void webClick(View v)
{
String stringID = String.valueOf(v.getId());
String[] temp = stringID.split("utton");
stringID = "file:///android_asset/chapter/chapter" +temp[1]+ ".html"
Intent intent = new Intent(this, Webview.class);
intent.putExtra("weblink",stringID);
startActivity(intent);
}
答案 3 :(得分:0)
您可能想要使用ListView。如果你想拥有按钮,那么使用ListView,每个项目的布局都有一个按钮。
然后,您设置了onItemClickListener。您获得该按钮的位置(第一个位置为0,第二个位置为1,等等)。然后撰写一个链接:
String link= "file:///android_asset/chapter/chapter" + (position +1) + ".html";
代码的其余部分将是相同的(intent.putExtra("weblink", link);
)
答案 4 :(得分:0)
我的建议是在这种情况下使用ListView或GridView,并将文件名保存在ArrayList中。然后你做这样的事情:
List<String> urlList = new ArrayList<String>();
urlList.add("file:///android_asset/chapter/chapter1.html");
urlList.add("file:///android_asset/chapter/chapter2.html");
// and so on
ListView listView = (ListView)findViewById(R.id.listView);
ArrayAdapter adapter = new ArrayAdapter(this, android.R.id.simple_list_item_1, urlList);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(this, Webview.class);
intent.putExtra("weblink", urlList.get(position));
startActivity(intent);
}
});
这将是一个很好的实现,因为你可以避免使用100个按钮和OnClickListeners来保存一些资源。
编辑:此代码应该正在运行,只需将其放在onCreate()中进行一些测试。您所要做的就是在layout.xml中定义一个ListView,如下所示:100个按钮:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView">
</ListView>
</LinearLayout>
如果你真的想用Buttons而不是按照morgano的建议。
答案 5 :(得分:-5)
public void webClick(View v)
{
Intent intent = new Intent(this, Webview.class);
switch(v.getId())
{
case R.id.button1:
intent.putExtra("weblink","file:///android_asset/chapter/chapter1.html");
startActivity(intent);
break;
case R.id.button2:
intent.putExtra("weblink","file:///android_asset/chapter/chapter2.html");
startActivity(intent);
break;
case R.id.button3:
intent.putExtra("weblink","file:///android_asset/chapter/chapter3.html");
startActivity(intent);
break;
.
.
.
.
case R.id.button100:
intent.putExtra("weblink","file:///android_asset/chapter/chapter100.html");
startActivity(intent);
break;
default:
break;
}
}