[英]Android Custom ListView with ArrayList How do I open a second activity
我有這個帶有ArrayList的Custom ListView,我正在嘗試使用可繪制的文件夾中使用的圖標打開第二個活動
setOnItemClickListener(new OnItemClickListener() {}
但是當我單擊ListItem CbMain.java時,它會強制關閉應用程序
package com.frostistudios.circuitbasicspro;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
public class CbMain extends Activity {
String[] listItems = {"Menu One","Menu Two","Menu Three"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cb_main);
ListView lv = (ListView) findViewById(R.id.listView); //listview in xml file
List<ListViewItem> items = new ArrayList<CbMain.ListViewItem>();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
if(position == 0){
//call to custom method for opening activity
openItemOneActivity();
}
else if(position == 1){
openItemTwoActivity();
}
else if(position == 2){
openItemThreeActivity();
}
}
});
items.add(new ListViewItem()
{{
ThumbnailResource = R.drawable.ic_action_call;
Title = listItems[0];
SubTitle = "";
}});
items.add(new ListViewItem()
{{
ThumbnailResource = R.drawable.ic_action_call;
Title = listItems[1];
SubTitle = "";
}});
items.add(new ListViewItem()
{{
ThumbnailResource = R.drawable.ic_action_call;
Title = listItems[2];
SubTitle = "";
}});
CustomListViewAdapter adapter = new CustomListViewAdapter(this, items);
lv.setAdapter(adapter);
}
//custom methods to open another activity
public void openItemOneActivity(){
Intent intent = new Intent(this,ItemOneActivity.class);
startActivity(intent);
}
public void openItemTwoActivity(){
Intent intent = new Intent(this,ItemTwoActivity.class);
startActivity(intent);
}
public void openItemThreeActivity(){
Intent intent = new Intent(this,ItemThreeActivity.class);
startActivity(intent);
}
class ListViewItem {
public int ThumbnailResource;
public String Title;
public String SubTitle;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
//getMenuInflater().inflate(R.menu.actionbar, menu);
//return super.onCreateOptionsMenu(menu);
return true;
}
}
CustomListViewAdapter.java,這是自定義列表適配器文件
package com.frostistudios.circuitbasicspro;
import java.util.List;
import com.frostistudios.circuitbasicspro.CbMain.ListViewItem;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class CustomListViewAdapter extends BaseAdapter
{
LayoutInflater inflater;
List<ListViewItem> items;
public CustomListViewAdapter(Activity context, List<ListViewItem> items) {
super();
this.items = items;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ListViewItem item = items.get(position);
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.item_row, null);
ImageView imgThumbnail = (ImageView) vi.findViewById(R.id.imgThumbnail);
TextView txtTitle = (TextView) vi.findViewById(R.id.txtTitle);
TextView txtSubtitle = (TextView) vi.findViewById(R.id.txtSubTitle);
imgThumbnail.setImageResource(item.ThumbnailResource);
txtTitle.setText(item.Title);
txtSubtitle.setText(item.SubTitle);
return vi;
}
}
這是保存ListView設計的XML文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imgThumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_action_call"
android:layout_marginLeft="10dp"
android:layout_marginTop="2dp"/>
<TextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/imageView1"
android:layout_toRightOf="@+id/imageView1"
android:text="Large Text"
android:layout_marginLeft="60dp"
android:layout_marginTop="6dp"/>
<TextView
android:id="@+id/txtSubTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imageView1"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:text="" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:src="@drawable/arrow" />
</RelativeLayout>
如果您發布錯誤輸出,將會很有幫助。 清單中是否聲明了您的其他活動? 您已經在適配器中具有上下文,因此可以在其中設置上下文並嘗試。 我也認為View vi是不必要的,可以使用convertView。
從您的原木貓看,出現錯誤似乎是因為您使用的theme
不是來自compat
。 檢查manifest
,並確保使用compat
主題。
示例(適用於您應用中的所有活動):
<application
//other code
android:theme="@style/Theme.AppCompat.Light" >
或者,如果您僅對特定活動使用操作欄:
<Activity
//other code
android:theme="@style/Theme.AppCompat.Light" >
提示 :
經常注意log cat
,尤其是caused by
。 我從那里知道問題所在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.