ListView与onItemClick位置

3
我有一个带有ListView的应用程序,当你点击任何一行时都会弹出不同的东西(使用PauseDialog)。每一行中的标头都在“array.xml”中,而将弹出的文本放在java代码中。 问题是我需要向ListView添加很多行,我想知道是否有比我所做的更有效的方法。 array.xml的示例:
<?xml version="1.0" encoding="utf-8"?>
<resources>
        <array name="Row_List">  
            <item>row1</item>
            <item>row2</item>
            <item>row3</item>
            <item>row4</item>
    </array>   
</resources>

(只是更多的行...) Java代码:

public class MainActivity extends Activity implements OnItemClickListener {
    ListView list;
    ArrayAdapter<String> adaptr;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = (ListView) findViewById(R.id.listView1);
        adaptr = new ArrayAdapter<String>(this,
                 android.R.layout.simple_list_item_1
                         , getResources().getStringArray(R.array.Row_List));
            View header = getLayoutInflater().inflate(R.layout.header, null);
        list.addHeaderView(header);
        list.setAdapter(adaptr);
        list.setOnItemClickListener(this);
        list.setFastScrollEnabled(true);
    }
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        Dialog dialog1 = new Dialog(this, R.style.PauseDialog);
        dialog1.setContentView(R.layout.dialog1);
        TextView text = (TextView) dialog1.findViewById(R.id.tv1);
        dialog1.setTitle(R.string.Title);
        dialog1.getWindow().setBackgroundDrawable(new ColorDrawable(0));
        switch(position) {
        case 0:
            String url = "My-Site.com";
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(url));
            startActivity(i);
            break;
        case 1:
            text.setText("Description of Row1");
            dialog1.show();
            break;
        case 2:
            text.setText("Description of Row2");
            dialog1.show();
            break;
        case 3:
            text.setText("Description of Row3");
            dialog1.show();
            break;
        case 4:
            text.setText("Description of Row4");
            dialog1.show();
            break;
        }
    }
}

那么有更好的方法将描述放入对话框中吗?(如果有一种方法,所有描述都在xml文件中而不是在代码中,我会很高兴)

1个回答

1
你可以将描述存储为 string-arrayarrays.xml 中:
<string-array name="desciptions">
    <item>item 0 descript</item>
    <item>item 1 descript</item>
    <item>item 2 descript</item>
</string-array>

定义一个名为MainActivity的数组:
static String[] desciptions = null;

.. 在 onCreate() 中初始化它:

if (null==desciptions) desciptions
  = getResources().getStringArray(R.array.descriptions);

...并将您的switch语句替换为类似于以下内容的代码,考虑您的'0'特殊情况:

if (0==position) {
    String url = "My-Site.com";
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(url));
    startActivity(i);
} else {
    text.setText(descriptions[position]);
    dialog.show();
}

请记住需要为特殊情况做出一些让步,以保持索引对齐,例如使用 text.setText(descriptions[position-1]); 或者有一个空的项目0描述。


如果我想让它静态的呢? - elichai2
假设“it”是descriptions数组(因为我强烈建议这样),我更新了我的答案。如果你指的是其他东西,请告诉我。 - CodeShane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接