ListView с индивидуальными элементами - PullRequest
1 голос
/ 19 марта 2012

Я внимательно посмотрел на проблему, так как вы, ребята, были настолько уверены в себе, и я обнаружил, что набрал неправильное имя макета, когда набирал вопрос (извините за это)

правильный контент-контент, который у меня есть, это:

setContentView(R.layout.main);

Конец редактирования

я вижу свой идентификатор в R.Java:

public static final int txtReadMore_link=0x7f06000e;

Обновление:

03-19 17:05:07.158: E/AndroidRuntime(1356): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.website.playlist_activity}: java.lang.NullPointerException
03-19 17:05:07.158: E/AndroidRuntime(1356):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at android.os.Looper.loop(Looper.java:123)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at java.lang.reflect.Method.invokeNative(Native Method)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at java.lang.reflect.Method.invoke(Method.java:507)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at dalvik.system.NativeStart.main(Native Method)
03-19 17:05:07.158: E/AndroidRuntime(1356): Caused by: java.lang.NullPointerException
03-19 17:05:07.158: E/AndroidRuntime(1356):     at net.website.playlist_activity.onCreate(playlist_activity.java:101)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-19 17:05:07.158: E/AndroidRuntime(1356):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

Я пытаюсь получить доступ к textview из пользовательского списка, и ниже приведен код, и я получаю нулевую ссылку ref ... как я могу получить доступ к txtReadMore_link?

показать новое действие, когда пользователь нажимает на ссылку.

playlist_activity

private TextView link;
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_row);

       //throwing error - NULL????
       link = (TextView)findViewById(R.id.txtReadMore_link);

       link.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        int duration = Toast.LENGTH_SHORT;
        TextView tx =(TextView)v.findViewById(R.id.txtReadMore_link); 
        Toast toast = Toast.makeText(playlist_activity.this, tx.getText(), duration);
        toast.show();               
        }
    });
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="#b5b5b5"
        android:dividerHeight="1dp"
        android:listSelector="@drawable/list_selector"></ListView>    
</LinearLayout>

list_row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_selector"
    android:orientation="horizontal"
    android:padding="5dip" >

    <!--  ListRow Left sied Thumbnail image -->
    <LinearLayout android:id="@+id/thumbnail" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="3dip"      
        android:layout_alignParentLeft="true"
        android:background="@drawable/image_bg" 
        android:layout_marginRight="5dip">

        <ImageView     
            android:id="@+id/list_image"   
            android:layout_width="50dip"
            android:layout_height="50dip"
            android:src="@drawable/rihanna"/>

    </LinearLayout>

    <!-- Title Of Song-->
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:text="Rihanna Love the way lie"
        android:textColor="#040404"
        android:typeface="sans" 
        android:textSize="15dip"
        android:textStyle="bold"/>

    <!-- Artist Name -->
    <TextView
        android:id="@+id/artist"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
        android:textColor="#343434"
        android:textSize="10dip"
        android:layout_marginTop="1dip"
        android:layout_toRightOf="@+id/thumbnail"
        android:text="Just gona stand there and ..." />


       <TextView
            android:id="@+id/txtReadMore_link"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:layout_margin="5dp" 
            android:clickable="true"
            android:text="Click here to read more.."
            android:textSize="9sp" />



</RelativeLayout>

Ответы [ 3 ]

1 голос
/ 19 марта 2012

просто очистите ваш проект и снова запустите его так: в вашей Eclipse IDE нажмите Project ==> Очистить ==> Проверьте свой проект ==> Нажмите OK .и снова запустите ваш проект, и он будет работать;)

РЕДАКТИРОВАТЬ:

у вас есть NullPointerException, потому что в вашем методе setContentView() вы указали макетвашей деятельности как: main.xml

И вы пытаетесь найти View По идентификатору, которого нет в вашем макете main.xml (он находится на вашем list_row.xml), убедитесь, что вы указалиточный макет вашего Activity, или попробуйте объявить свой TextView в своем макете main.xml

0 голосов
/ 19 марта 2012

Нельзя использовать findViewById() из метода onCreate() для поиска View, который находится в макете строки ListView. Правильный способ - использовать пользовательский адаптер и в методе getView() установить прослушиватель при нажатии для этого конкретного View. Вокруг StackOverflow возникает много вопросов относительно того, как это сделать. Вот несколько уроков:

http://www.vogella.de/articles/AndroidListView/article.html или http://commonsware.com/Android/excerpt.pdf

0 голосов
/ 19 марта 2012

Я подозреваю, что вы не устанавливаете вид, которым, как вы думаете, вы являетесь для активности , то есть вы делаете

setContentView(R.layout.list_row); 

в onCreate, где вы, вероятно, хотели сказать

setContentView(R.layout.main); 

Поскольку txtReadMore_link находится на вашем main.xml, а не на list_row.xml, код не сможет найти представление и вернуть ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...