在浏览了有关该问题的多个问题并尝试了多个问题之后,我最终得出了当前的错误。 基本上,我试图通过单击按钮动态填充列表视图。
为此,我有以下.xml提取:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/new_exercise_button"
android:id="@+id/exercise_add"
android:onClick="addItems" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false" />
我实现了一个用于处理列表的类RoutineListView:
public class RoutineListView extends ListActivity {
ArrayList<String> listItems=new ArrayList<String>();
ArrayAdapter<String> adapter;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.fragment_main);
adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
listItems);
setListAdapter(adapter);
}
public void addLItems(View v) {
adapter.add("hi");
}
}
当我点击主活动中的按钮时,我尝试使用MainActivity中的以下代码调用该方法:
public void addItems(View v){
RoutineListView routineListView = (RoutineListView)this.getApplicationContext();
routineListView.addLItems(v);
}
但是,调试器会为getApplicationContext()
抛出以下错误 - 如果我没有实现它,我会得到adapter.add()
的空例外。
引起:java.lang.ClassCastException:android.app.Application无法强制转换为com.mycompany.ownfitnesstracker.RoutineListView
最后,但并非最不重要的是,我在清单中注册了我的RoutineListView
:
<activity
android:name=".RoutineListView"
android:label="@string/routine_list_name" >
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
答案 0 :(得分:0)
RoutineListView是Activity
,而不是Application
。 getApplicationContext()
不会返回Activity
。你不能以这种方式获得对RoutineListView的引用。
有一些方法可以在活动之间进行通信,但很少涉及从一方到另一方的直接方法调用。大多数情况下,您使用Intent
,或者将数据存储在活动之外(例如使用SharedPreferences
)。
答案 1 :(得分:0)
您可以在不使用对象的情况下直接呼叫addItems
。
public void addItems(View v){
addLItems(v);
}