0

我有一个包含客户端数据列表视图的应用程序。listView 中的每一行都将包含名称、地址、电话号码等。我从网络调用中获取数据,然后使用将支持适配器的数据填充一个 ArrayList。

当用户单击列表中的一行时,然后在适配器的 onClick 中,我获取电话号码并启动启动拨号器活动的意图。这一切都很好。

客户的电话号码总是来自网络电话,但在视图中我有逻辑来确定它是否显示。一些公司不希望显示客户编号,而另一些公司则希望显示。

如何确定保存数字的 TextView 是否在运行时显示在视图中?我设置了一个标签,该标签传递给 onclick,该标签在 listView 中具有已单击的行,但我如何使用类似

if(Textview.isShown)

在 onClick 里面?我最终想要的是,如果显示的文本视图包含该号码,那么用户可以单击以启动拨号器,否则拨号器将不会拨打该号码(即使它存在于列表中,只是没有显示)。

在此先感谢马特。.

 private class MySimpleArrayAdapter extends ArrayAdapter<String> {




            private final Context context;
            private final ArrayList<?> list;



            public MySimpleArrayAdapter(Context context, ArrayList<?> list) {

                super(context, R.layout.getrotadetailsrow);
                Log.e(TAG, "inside adapter constructor");
                this.context = context;
                this.list = list;


            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {


                LayoutInflater inflater = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                View rowView = inflater.inflate(R.layout.getrotadetailsrow, parent,
                        false);
                String record = list.get(position).toString();
                String[] recordArray = record.split(",");

                //recordArray[6] = ****the telephone number****

                rowView.setTag(record);

                TextView telNo =  (TextView) rowView
                        .findViewById(R.id.telNo);

    if(someCondition){

         telNo.setText("TelNo: " + recordArray[6]);

         }else{

            telNo.setVisibility(View.GONE);

          }

                return rowView;
            }

            @Override
            public int getCount() {
                return this.list.size();
            }

    }//end of adapter


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


            String record = (String)view.getTag();

            String[] itemsInRecord = record.split(",");

            String telNo = itemsInRecord[6];




                String numberToDial = "tel:" + telNo;
                startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(numberToDial)));


        }

.

[编辑1]

public class GetRotaDetails extends NfcBaseActivity implements OnItemClickListener{



    ArrayList<ArrayList<String>> array;

    private static final String TAG = GetRotaDetails.class.getSimpleName();
    NfcScannerApplication nfcscannerapplication;
    String callID;
    ListView listView;
    Intent intent;
    MySimpleArrayAdapter arrayAdapter;
    SharedPreferences  appSharedPrefs;
    Handler handler;
    Runnable runnable;
    String rotaAutoLogout;
    int rotaAutoLogoutAsInt;
    String postcodeToPassToDirections;
    String postcodeWithoutSpaces;
    public static final String CUSTOM_QRCODE_ACTION = "com.carefreegroup.QRCODE_ACTION";
    String carerID;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ///////////set titlebar to carer's name///////////////////////
        //////////////////////////////////////////////////////////////
        nfcscannerapplication = (NfcScannerApplication) getApplication();
        intent = this.getIntent();

        setContentView(R.layout.getrotadetailslayout);
        array = new  ArrayList<ArrayList<String>>();
        listView = (ListView) findViewById(R.id.getrotadetailslistview);






    }// end of onCreate











    private class AsyncGetRotaDetails extends AsyncTask<String, Void, String> {

        ProgressDialog progressDialog;
        String rotaDetails = null;



        @Override
        protected String doInBackground(String... params) { 

            try {
                Log.e(TAG, "inside doInBackground");

                rotaDetails = nfcscannerapplication.loginWebservice.getRotaDetail(params[0]);

            } catch (Exception e) {

                e.printStackTrace();

            }
            return rotaDetails;

        }

        @Override
        protected void onPostExecute(String xmlResult) {
            super.onPostExecute(xmlResult);
            if (progressDialog != null)
                progressDialog.dismiss();

                RetrieveExtraDetails red = new RetrieveExtraDetails();
                array = red.getExtraDetails(xmlResult);
                Log.e(TAG, "array from WS = " + array.size());

                if (arrayAdapter == null){
                    MySimpleArrayAdapter arrayAdapter = new MySimpleArrayAdapter(GetRotaDetails.this, array);
                    listView.setAdapter(arrayAdapter);
                    listView.setOnItemClickListener(GetRotaDetails.this);
                 }//end if

        }// end of postExecute

    }//end of Async




    private class MySimpleArrayAdapter extends ArrayAdapter<String> {




        private final Context context;
        private final ArrayList<?> list;



        public MySimpleArrayAdapter(Context context, ArrayList<?> list) {

            super(context, R.layout.getrotadetailsrow);
            Log.e(TAG, "inside adapter constructor");
            this.context = context;
            this.list = list;


        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {


            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View rowView = inflater.inflate(R.layout.getrotadetailsrow, parent,
                    false);
            String record = list.get(position).toString();
            String[] recordArray = record.split(",");
            rowView.setTag(record);



             TextView telNo = (TextView) rowView
                        .findViewById(R.id.telno);





            if(  someCondition ){  


                telNo.setVisibility(View.GONE);



            }else {
                telNo.setVisibility(View.VISIBLE);
                telNo.setText("TelNo: " + recordArray[6]);
            }

                }

            }

            return rowView;
        }

        @Override
        public int getCount() {
            return this.list.size();
        }

}//end of adapter




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


        String record = (String)view.getTag();

        String[] itemsInRecord = record.split(",");

        String telNo = itemsInRecord[6];




            String numberToDial = "tel:" + telNo;
            startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(numberToDial)));


    }





    }// end of class
4

1 回答 1

1

您需要在列表项单击时初始化 textview

 @Override
 public void onItemClick(AdapterView<?> parent, View view, int position, long id)        
             {
             TextView tv = (TextView)view.findViewById(R.textView1);
              if (tv.getVisibility() == View.VISIBLE) {
                   // Its visible
             } else {
            // Either gone or invisible
             }
             }
 });

在项目单击时,您可以将视图作为onItemClick. 所以使用view对象来初始化textview

    TextView tv = (TextView)view.findViewById(R.textView1);

然后使用 textview tv 执行所需的操作。

于 2013-09-11T13:10:16.567 回答