簡體   English   中英

如何在Android上使用多個適配器

[英]How to use multiple adapters on Android

我正在嘗試創建2個活動,在第一個活動中,我在列表視圖中顯示“ nome”和“ tipo_pessoa”,我想在第二個活動中顯示“ cargo”。 正如您在解析的Json中看到的那樣,我正在使用2個模型,我的問題是,是否需要使用2個適配器才能做到這一點? 這是我到目前為止嘗試過的:

public void parseJson(JSONObject json) throws JSONException {

        try {

            JSONArray dados = json.getJSONArray("dados");
            feedList = new ArrayList<ClientesModel>();
            contatoList = new ArrayList<ClientesContatosModel>();
            // parsing json object
            for (int i = 0; i < dados.length(); i++) {

                JSONObject item = dados.getJSONObject(i);
                ClientesModel mClientesModel = new ClientesModel();


                mClientesModel.setNome(item.optString("nome"));
                mClientesModel.setTipo_pessoa(item.optString("tipo_pessoa"));
                mClientesModel.setInformacoes_adicionais(item.optString("informacoes_adicionais"));
                mClientesModel.setCpf(item.optString("cpf"));
                mClientesModel.setCnpj(item.optString("cnpj"));
                JSONArray contatos = item.getJSONArray("contatos");

                    for (int j = 0; j < contatos.length(); j++) {


                        JSONObject data = contatos.getJSONObject(j);

                        ClientesContatosModel mClientesContatoModel = new ClientesContatosModel();


                        contatoList.add(mClientesContatoModel);

                        mClientesContatoModel.setNomeContato(data.optString("nome"));
                        mClientesContatoModel.setCargo(data.optString("cargo"));


                    }


                    feedList.add(mClientesModel);

                    System.out.println(contatoList);


            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

主要活動:

public void updateList()  {
        feedListView= (ListView) findViewById(R.id.custom_list);

        feedListView.setVisibility(View.VISIBLE);
        progressbar.setVisibility(View.GONE);

        feedListView.setAdapter(new CustomListAdapter(this, feedList));


        feedListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {

ntent intent = new Intent(FeedListActivity.this, FeedDetailsActivity.class);

            intent.putExtra("data", contatoList);
            startActivity(intent);
            }
        });
    }

第二項活動:

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_feed_details);



    ListView lv = (ListView) findViewById(R.id.listViewContatos);

    lv.setAdapter(new ContatosListAdapter(this, contatoList));

    feed = (ClientesContatosModel) this.getIntent().getSerializableExtra("data");






        TextView title = (TextView) findViewById(R.id.textView);
        title.setText(feed.getNomeContato());


    }

現在這是我的日志:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.javatechig.feedreader/com.javatechig.feedreader.FeedDetailsActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
        at android.app.ActivityThread.access$800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5086)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at com.javatechig.feedreader.ContatosListAdapter.getCount(ContatosListAdapter.java:33)
        at android.widget.ListView.setAdapter(ListView.java:480)
        at com.javatechig.feedreader.FeedDetailsActivity.onCreate(FeedDetailsActivity.java:33)

Java第33行是:lv.setAdapter(new ContatosListAdapter(this,contatoList));

您第一個活動中的數據未完全傳遞到第二個活動中。 該錯誤是由於contatoList為空引起的,它似乎已在MainActivity中填充,但僅使用意圖傳遞了提要數據。

您還需要找到一種將contatoList數據傳遞到第二個活動的方法。 一種方法是在第二個活動啟動Intent中將JSON字符串作為Extra傳遞(如果它不是太大),就像在第二個活動中傳遞“ nome”並重新解析一樣。

您還可以使用Sqlite甚至SharedPreferences存儲數據。

如果您有兩個不同的顯示器,那么您將需要兩個不同的適配器。

我可以解決它:

public void updateList() {


        feedListView= (ListView) findViewById(R.id.custom_list);
        feedListView.setVisibility(View.VISIBLE);
        progressbar.setVisibility(View.GONE);
        feedListView.setAdapter(new CustomListAdapter(this, feedList));

        final ListView V = (ListView) findViewById(R.id.contato_list);
        //V.setVisibility(View.VISIBLE);
        V.setAdapter(new ContatosListAdapter(this, contatoList));



        feedListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {

                Object o = V.getItemAtPosition(position);
                ClientesContatosModel newsData = (ClientesContatosModel) o;


                Intent intent = new Intent(FeedListActivity.this, FeedDetailsActivity.class);
                intent.putExtra("feed", newsData);
                startActivity(intent);

            }

        });



    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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