簡體   English   中英

帶有ArrayList的Android自定義ListView如何打開第二個活動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM