更改自定义listadapter中的图片

时间:2011-12-26 12:49:52

标签: android

我刚刚开始学习android编程。(抱歉我的英语不好,但我是荷兰人;-))

我已经创建了一个带有图标和文字的自定义列表适配器。那部分有效但...... 我从我网站上的文件中获取信息,根据该信息,我希望在文本之前有一个特定的图标,但这不起作用。 文件看起来像这个“1,1,1,1,1,1,1,1,24,65,93,x” 如果第一个字符是“1”,那么我想要一个bulpon图标,如果是“0”,我想要一个bulpoff图标。

    if (locatie[position] == "Huiskamer - achter TV" && str[0].equals("1")) {
            icon.setImageResource(R.drawable.bulpon);
        } else {
                icon.setImageResource(R.drawable.bulpoff);
                }
    this doesn't work but

    This works.:

    if (locatie[position] == "Huiskamer - achter TV" ) {
            icon.setImageResource(R.drawable.bulpon);
        } else {
                icon.setImageResource(R.drawable.bulpoff);
                }

str [0]我来自oncreate调用的方法。

这是我的代码。

    package nl.ernst.splash;


    public class Binnen extends ListActivity {

final String textSource = ("http://www.airbrush-ernst.nl/duinotest.txt"); // data         van inputs arduino
String str[];

public class MyCustomAdapter extends ArrayAdapter<String> {

    public MyCustomAdapter(Context context, int textViewResourceId,
            String[] objects) {
        super(context, textViewResourceId, objects);
        // TODO Auto-generated constructor stub
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        // return super.getView(position, convertView, parent);

        View row = convertView;         

        if (row == null) {
            LayoutInflater inflater = getLayoutInflater();
            row = inflater.inflate(R.layout.row, parent, false);
        }

        TextView label = (TextView) row.findViewById(R.id.weekofday);
        label.setText(locatie[position]);
        ImageView icon = (ImageView) row.findViewById(R.id.icon);


        if ((locatie[position] == "Huiskamer - achter TV") &&   (str[0].equals("1"))) {
            icon.setImageResource(R.drawable.bulpon);
        } else {
                icon.setImageResource(R.drawable.bulpoff);
                }

        return row;
    }
}

String[] locatie = { "Huiskamer - achter TV", "Huiskamer - kast",
        "Huiskamer - schildpadden", "Keuken", "Voordeur" };

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    haaldata();
    setListAdapter(new MyCustomAdapter(Binnen.this, R.layout.row, locatie));

}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    // super.onListItemClick(l, v, position, id);
    String selection = l.getItemAtPosition(position).toString();
    Toast.makeText(this, selection, Toast.LENGTH_SHORT).show();
}

private void haaldata() {
    // TODO Auto-generated method stub
    URL textUrl;
    try {
        textUrl = new URL(textSource);
        BufferedReader bufferReader = new BufferedReader(
                new InputStreamReader(textUrl.openStream()));
        String StringBuffer;
        String stringText = "";
        while ((StringBuffer = bufferReader.readLine()) != null) {
            stringText += StringBuffer;
        }
        bufferReader.close();
        String str[] = stringText.split(",");

                    //test
        if(str[0].equals("1"))
        Toast.makeText(Binnen.this, str[0], Toast.LENGTH_SHORT).show();

        // setTogglebuttons(stringText); //methode om togglebuttons te
        // setten

        // binnen.setText("binnen= " + str[8] + "\t graden Celsius");
        // buiten.setText("buiten= " + str[9] + "\t graden Celsius");

        // mprogress.setProgress(Integer.parseInt(str[10])); // set
        // progresbar
        // bar.setText(str[10]); // voor LDR
        // waarde

        // msg.setText(stringText);
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block e.printStackTrace();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

    }
}
    }// class Binnen

这是我的日志猫

    12-26 12:02:49.009: I/global(279): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
   12-26 12:03:38.129: W/KeyCharacterMap(279): No keyboard for id 0
   12-26 12:03:38.129: W/KeyCharacterMap(279): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
   12-26 12:03:39.948: I/global(279): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
   12-26 12:04:36.769: I/global(311): Default buffer size used in BufferedReader  constructor. It would be better to be explicit if an 8k-char buffer is required.
   12-26 12:06:17.428: I/global(339): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
   12-26 12:08:16.408: I/global(368): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
    12-26 12:08:16.459: D/AndroidRuntime(368): Shutting down VM
   12-26 12:08:16.459: W/dalvikvm(368): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
   12-26 12:08:16.488: E/AndroidRuntime(368): FATAL EXCEPTION: main
  12-26 12:08:16.488: E/AndroidRuntime(368): java.lang.NullPointerException
   12-26 12:08:16.488: E/AndroidRuntime(368):   at        nl.ernst.splash.Binnen$MyCustomAdapter.getView(Binnen.java:56)
    12-26 12:08:16.488: E/AndroidRuntime(368):  at android.widget.AbsListView.obtainView(AbsListView.java:1315)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at  android.widget.ListView.makeAndAddView(ListView.java:1727)
    12-26 12:08:16.488: E/AndroidRuntime(368):  at android.widget.ListView.fillDown(ListView.java:652)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at android.widget.ListView.fillFromTop(ListView.java:709)
  12-26 12:08:16.488: E/AndroidRuntime(368):    at android.widget.ListView.layoutChildren(ListView.java:1580)
  12-26 12:08:16.488: E/AndroidRuntime(368):    at android.widget.AbsListView.onLayout(AbsListView.java:1147)
  12-26 12:08:16.488: E/AndroidRuntime(368):    at  android.view.View.layout(View.java:7035)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    12-26 12:08:16.488: E/AndroidRuntime(368):  at  android.view.View.layout(View.java:7035)
     12-26 12:08:16.488: E/AndroidRuntime(368):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
     12-26 12:08:16.488: E/AndroidRuntime(368):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at android.view.View.layout(View.java:7035)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at android.view.View.layout(View.java:7035)
   12-26 1 2:08:16.488: E/AndroidRuntime(368):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
   12-26 1 2:08:16.488: E/AndroidRuntime(368):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at android.os.Handler.dispatchMessage(Handler.java:99)
    12-26 12:08:16.488: E/AndroidRuntime(368):  at android.os.Looper.loop(Looper.java:123)
    12-26 12:08:16.488: E/AndroidRuntime(368):  at android.app.ActivityThread.main(ActivityThread.java:4627)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at java.lang.reflect.Method.invokeNative(Native Method)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at java.lang.reflect.Method.invoke(Method.java:521)
    12-26 12:08:16.488: E/AndroidRuntime(368):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
   12-26 12:08:16.488: E/AndroidRuntime(368):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
  12-26 12:08:16.488: E/AndroidRuntime(368):    at dalvik.system.NativeStart.main(Native Method)
   12-26 13:14:07.798: I/global(398): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
   12-26 13:14:07.848: D/AndroidRuntime(398): Shutting down VM
    12-26 13:14:07.848: W/dalvikvm(398): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
    12-26 13:14:07.858: E/AndroidRuntime(398): FATAL EXCEPTION: main
   12-26 13:14:07.858: E/AndroidRuntime(398): java.lang.NullPointerException
   12-26 13:14:07.858: E/AndroidRuntime(398):   at nl.ernst.splash.Binnen$MyCustomAdapter.getView(Binnen.java:52)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.widget.AbsListView.obtainView(AbsListView.java:1315)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.widget.ListView.makeAndAddView(ListView.java:1727)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.widget.ListView.fillDown(ListView.java:652)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.widget.ListView.fillFromTop(ListView.java:709)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.widget.ListView.layoutChildren(ListView.java:1580)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.widget.AbsListView.onLayout(AbsListView.java:1147)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.view.View.layout(View.java:7035)
     12-26 13:14:07.858: E/AndroidRuntime(398):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.view.View.layout(View.java:7035)
     12-26 13:14:07.858: E/AndroidRuntime(398):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
     12-26 13:14:07.858: E/AndroidRuntime(398):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
     12-26 13:14:07.858: E/AndroidRuntime(398):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
   12-26 13:14:07.858: E/AndroidRuntime(398):   at android.view.View.layout(View.java:7035)
   12-26 13:14:07.858: E/AndroidRuntime(398):   at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
      12-26 13:14:07.858: E/AndroidRuntime(398):    at android.view.View.layout(View.java:7035)
       12-26 13:14:07.858: E/AndroidRuntime(398):   at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
  12-26 13:14:07.858: E/AndroidRuntime(398):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
  12-26 13:14:07.858: E/AndroidRuntime(398):    at android.os.Handler.dispatchMessage(Handler.java:99)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.os.Looper.loop(Looper.java:123)
    12-26 13:14:07.858: E/AndroidRuntime(398):  at android.app.ActivityThread.main(ActivityThread.java:4627)
   12-26 13:14:07.858: E/AndroidRuntime(398):   at java.lang.reflect.Method.invokeNative(Native Method)
     12-26 13:14:07.858: E/AndroidRuntime(398):     at java.lang.reflect.Method.invoke(Method.java:521)
   12-26 13:14:07.858: E/AndroidRuntime(398):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
   12-26 13:14:07.858: E/AndroidRuntime(398):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
     12-26 13:14:07.858: E/AndroidRuntime(398):     at dalvik.system.NativeStart.main(Native Method)
   12-26 13:19:07.919: I/Process(398): Sending signal. PID: 398 SIG: 9

提前Tnx

Gr Ernst

2 个答案:

答案 0 :(得分:0)

你必须把这样的条件

if ((locatie[position].equals("Huiskamer - achter TV")) && (str[0].equals("1"))) {
        icon.setImageResource(R.drawable.bulpon);
    } else {
            icon.setImageResource(R.drawable.bulpoff);
            }

将条件括在括号内。

请在条件之上初始化locatie数组。 并检查上面的条件

答案 1 :(得分:0)

修正了我自己的问题: - )

在我的haaldata方法中,我改变了一些东西:

    if(str[0].equals("1")){
      on1 = true;
      }else{on1 =false;}

    if(str[1].equals("1")){
      on2 = true;
     }else{on2 =false;}

然后在我的getview()方法中我改变了:

    if (locatie[position] == "Huiskamer - achter TV" && on1) {
        icon.setImageResource(R.drawable.bulpon);
        } else if (locatie[position] == "Huiskamer - kast" &&  on2) {
        icon.setImageResource(R.drawable.bulpon);
        } else {
        icon.setImageResource(R.drawable.bulpoff);
        }

现在有效!

也许它可以帮助别人。

Gr ernst