java - Android - 调用方法而不是类 - sdk

标签 java android class sdk

我的主要应用程序类如下,我想知道的是如何更改一行以从同一类或另一个类调用方法,而其他类仍然调用 Activity 。这是代码:

public class InfoActivity extends GDListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle(R.string.info_activity_title);

    ItemAdapter adapter = new ItemAdapter(this);
    adapter.add(createTextItem(R.string.info_about, AboutActivity.class));
    adapter.add(createTextItem(R.string.info_terms, TermsActivity.class));
    adapter.add(createTextItem(R.string.info_privacy, PrivacyActivity.class));

    setListAdapter(adapter);
}

private TextItem createTextItem(int stringId, Class<?> klass) {
    final TextItem textItem = new TextItem(getString(stringId));
    textItem.setTag(klass);
    return textItem;
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    final TextItem textItem = (TextItem) l.getAdapter().getItem(position);
    Intent intent = new Intent(InfoActivity.this, (Class<?>) textItem.getTag());
    startActivity(intent);
}
}

有问题的行:

adapter.add(createTextItem(R.string.info_about, AboutActivity.class));

我想调用一个方法作为示例:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { AboutActivity.this.getString(R.string.feedback_email) } );
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, AboutActivity.this.getString(R.string.feedback_subject)); 
    emailIntent.setType("plain/text"); 
    startActivity(emailIntent);

现在我在 AboutActivity 的 onCreate 方法中有这个,但自然没有理由在 Activity 中有这个功能(发送电子邮件)。相反,它可以按原样运行。那么,我该怎么做呢?

谢谢!

另外两行:

 adapter.add(createTextItem(R.string.info_terms, TermsActivity.class));
    adapter.add(createTextItem(R.string.info_privacy, PrivacyActivity.class));

它们在功能方面可以保持不变。这个问题是这个问题的附录(我之前问过并得到回答):

Android - call method instead of class - sdk

最佳答案

无论您选择如何处理此问题,诀窍是将有关单击特定项目时要执行的操作的决策实际转移到 onListItemClick 方法中。这是一个简单的方法。首先,将您的 createTextItem 方法更改为:

private TextItem createTextItem(int stringId) {
    final TextItem textItem = new TextItem(getString(stringId));
    return textItem;
}

然后,将您的 onListItemClick 更改为:

protected void onListItemClick(ListView l, View v, int position, long id) {
    final TextItem textItem = (TextItem) l.getAdapter().getItem(position);
    String textItemContents = textItem.getString(); //I don't know if this is actually correct. I don't know what the TextItem class is. But I think you get the idea.
    Intent intent = getIntentForString(textItemContents);
    startActivity(Intent);
}

您的 getIntentForString() 方法看起来像这样(请注意我们不能使用 switch,因为对字符串使用 switch 语句的支持最近才添加到 java 中):

private Intent getIntentForString(String textViewContents){
  if(textViewContents.equals(getString(R.string.info_about))){
    Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { 
      AboutActivity.this.getString(R.string.feedback_email) } );
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
      AboutActivity.this.getString(R.string.feedback_subject)); 
    emailIntent.setType("plain/text"); 
    return emailIntent;
  }
  else if(textViewContents.equals(getString(R.string.info_terms)){
    return new Intent(InfoActivity.this, TermsActivity.class);
  }
  else if(textViewContents.equals(getString(R.string.info_privacy)){
    return new Intent(InfoActivity.this, Privacy.class);
  }
  else{
    return null;
  }
}

请注意,这种方法有一个缺点。如果您开始向您的 ListView 添加一堆不同的项目,您将需要不断扩展您的 getIntentForString() 方法。不过就目前而言,这应该足够了。如果您发现自己向 ListView 添加更多选项,尽管它们将是我们需要采用的更复杂的方法。

关于java - Android - 调用方法而不是类 - sdk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7939768/

相关文章:

android - START_STICKY 不适用于 Android KitKat

python - 在python中将类返回给自身

javascript - 如何从匿名函数正确调用外部类方法

php - PHP 中对象和类的区别?

java - 如何在不使用 Apache POI 解析大型 excel 文件的情况下复制整个工作表?

java - 为什么 java 允许 TreeMap 键和 TreeSet 值不可比较?

java - Android Listview 删除项目之间的任何空间

java - 将 SVM 分类器从 sklearn 导出到 Java 代码库

java - 使用反向比较器对带有流的数组进行排序

android - 如何更改 Android Oreo 中的通知点颜色