1

ここに私の問題があります.ListViewからテキストを設定しようとしています. 問題は、(ログによると) メイン アクティビティの setContentView が、別の .xml (contactList.xml) から setText を設定したい TextView と一致しないため、エラーが発生することです。

ジョブ アクティビティ (メイン)

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.jobs);
    vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    TextView assigned = (TextView) findViewById(R.id.assigned);



    new ParseJobs().execute();

ParseJobs() メソッド

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);



        if (ACKNOWLEDGED.contains("False")) {


            /** Updating parsed JSON data into ListView */
            ListAdapter adapter = new SimpleAdapter(Jobs.this, contactList, R.layout.list_item, new String[] { job, pays, ready_at }, new int[] { R.id.job1, R.id.pays1, R.id.ready_at1 });
            setListAdapter(adapter);        

            //TextView readyORdue = (TextView) findViewById(R.id.readyORdue);
            //readyORdue.setText("Ready At:");
        }

        if (ACKNOWLEDGED.contains("True")) {

            /** Updating parsed JSON data into ListView */
            ListAdapter adapter = new SimpleAdapter(Jobs.this, contactList, R.layout.list_item, new String[] { job, pays, due_by }, new int[] { R.id.job1, R.id.pays1, R.id.due_by1 });
            setListAdapter(adapter);    

            //TextView readyORdue = (TextView) findViewById(R.id.readyORdue);
            //readyORdue.setText("Due By:");
        }


        VerifyDriver.dismiss();

    }
}

ParseJobs メソッドで、TextView "readyORdue" を更新しようとしていますが、TextView が SimpleAdapter contactList.xml に属しているため、エラーが発生します。

だから私の質問は、どうすれば私の contactList XML レイアウトからテキストビューを設定できますか?

ここに私のログがあります:

 07-17 15:55:16.703: W/dalvikvm(4387): threadid=1: thread exiting with uncaught exception (group=0x40015578)
 07-17 15:55:16.703: E/AndroidRuntime(4387): FATAL EXCEPTION: main
 07-17 15:55:16.703: E/AndroidRuntime(4387): java.lang.NullPointerException
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at com.jetdelivery.mobile.Jobs$ParseJobs.onPostExecute(Jobs.java:287)
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at com.jetdelivery.mobile.Jobs$ParseJobs.onPostExecute(Jobs.java:1)
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at android.os.AsyncTask.finish(AsyncTask.java:417)
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at android.os.Handler.dispatchMessage(Handler.java:99)
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at android.os.Looper.loop(Looper.java:130)
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at android.app.ActivityThread.main(ActivityThread.java:3687)
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at java.lang.reflect.Method.invokeNative(Native Method)
 07-17 15:55:16.703: E/AndroidRuntime(4387):    at java.lang.reflect.Method.invoke(Method.java:507)
07-17 15:55:16.703: E/AndroidRuntime(4387):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
07-17 15:55:16.703: E/AndroidRuntime(4387):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-17 15:55:16.703: E/AndroidRuntime(4387):     at dalvik.system.NativeStart.main(Native Method)

287行目は「readyORdue.setText("Ready At:");」です。

4

3 に答える 3

0

setListAdapterはListActivityに関連するものであり、ListActivityには独自のレイアウトコンテンツがあるため、ListActivityでContentViewを設定することはできません。できることは、リストと割り当てられたTextViewreadyORdueとTextViewを含む独自のレイアウトを作成することです。なぜ2つ使用しているのですか?if(firstCondition){..}else..を設定するだけです。

于 2012-07-17T23:09:57.903 に答える
0

これらは同じクラスですか?もしそうなら、私はあなたの で を定義readyORdueしますMainActivity。回避できる場合は、スレッドでユーザー インターフェイス オブジェクトを定義しないでください。それがあなたが持っている理由ですonCreate()

public class MainActivity {
    private TextView readyORDue;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.jobs);
        vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        TextView assigned = (TextView) findViewById(R.id.assigned);

        readyORDue = (TextView) findViewById(R.id.readyORdue);

        new ParseJobs().execute();
    }
}

次に、パーサーで

protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    if (ACKNOWLEDGED.contains("False")) {


        /** Updating parsed JSON data into ListView */
        ListAdapter adapter = new SimpleAdapter(Jobs.this, contactList, R.layout.list_item, new String[] { job, pays, ready_at }, new int[] { R.id.job1, R.id.pays1, R.id.ready_at1 });
        setListAdapter(adapter);        

        readyORdue.setText("Ready At:");
    }

    if (ACKNOWLEDGED.contains("True")) {

        /** Updating parsed JSON data into ListView */
        ListAdapter adapter = new SimpleAdapter(Jobs.this, contactList, R.layout.list_item, new String[] { job, pays, due_by }, new int[] { R.id.job1, R.id.pays1, R.id.due_by1 });
        setListAdapter(adapter);    

        readyORdue.setText("Due By:");
    }


    VerifyDriver.dismiss();

}

注: おそらくrunOnUiThreadsetText() 呼び出しに使用する必要があります。

于 2012-07-17T23:12:57.057 に答える
0

あなたが説明したように別のレイアウトファイル「contactList.xml」を使用したい場合は、まずそれを膨らませる必要があります。

LayoutInflater inflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); 
View contactList= inflater.inflate(R.layout.contactList, false);

TextView readyORdue = (TextView)contactList.findViewById(R.id.readyORdue);

必要な TextView を提供します。このビューを R.layout.jobs のコンテナに追加して、表示できるようにします。

于 2012-07-17T23:14:21.930 に答える